hash|快速幂|栈

lc1372

(DFS)遍历二叉树,分别从根节点开始尝试向左、向右的 zigzag 路径

记录最长路径长度并返回

sum: 题目加条件,代码dfs就可以加参数...

class Solution {

public:

int longestZigZag(TreeNode* root) {

int ans=0;

function<void(TreeNode*,int,int)>dfs=\&(TreeNode* root,int sum,int dire)

{

if(!root){

ans=max(ans,sum);

return ;

}

if(dire==0){

dfs(root->left,sum+1,1);

dfs(root->right,1,0);

}

else{

dfs(root->right,sum+1,0);

dfs(root->left,1,1);

}

};

dfs(root,0,0);

dfs(root,0,1);

return ans-1;

}

};

lc769

class Solution {

public:

int maxChunksToSorted(vector<int>& arr) {

int ans = 0, mx = 0;

for (int i = 0; i < arr.size(); ++i) {

mx = max(mx, arri);

ans += i == mx;

}

return ans;

}

};

lc768

! 单增栈的大小即为答案

class Solution {

public:

int maxChunksToSorted(vector<int>& arr) {

stack<int> stk;

for (int& v : arr) {

if (stk.empty() || stk.top() <= v)

stk.push(v);

else {

int mx = stk.top();

stk.pop();

while (!stk.empty() && stk.top() > v) stk.pop();

stk.push(mx);

}

}

return stk.size();

}

};

lc388

记录各层级目录长度,遍历输入字符串,找出包含后缀的文件的最长路径长度

class Solution {

public:

int lengthLongestPath(string input) {

int n = input.size();

int res = 0;

vector<int> sum(1000);

int p = 0;

while (p < n) {

int level = 0;

while (p < n && inputp == '\t') {

level++;

p++;

}

int q = p;

bool isfile = false;

while (p < n && inputp != '\n') {

if (inputp == '.')

isfile = true;

p++;

}

if (isfile) {

res = max(res, sumlevel + p - q);

} else {

sumlevel + 1 = sumlevel + p - q + 1;

}

p++;

}

return res;

}

};

lc372_递归 分治 super_pow

快速幂_倍增

用快速幂结合递归,计算a的由数组b表示的幂对1337取模的结果

class Solution {

public:

int MOD = 1337;

int qp(int a, int b) {

a %= MOD;

int t = 1;

while(b) {

if (b%2 == 1) {

t *= a;

t %= MOD;

}

a *= a;

a %= MOD;

b >>= 1;

}

return t;

}

int superPow(int a, vector<int>& b) {

if (b.size() == 0) return 1;

int p = b.back();

b.pop_back();

return qp(superPow(a, b), 10) * qp(a, p) % MOD;

}

};

lc2347

hash

class Solution {

public:

string bestHand(vector<int>& ranks, vector<char>& suits)

{

++bool flush = true;++

for (int i = 1; i < 5 && flush; ++i) {

flush = suitsi == suitsi - 1;

}

if (flush) {

return "Flush";

}

int cnt14{};

bool pair = false;

for (int& x : ranks)

{

if (++cntx == 3)

return "Three of a Kind";

pair |= cntx == 2;

}

return pair ? "Pair" : "High Card";

}

};

相关推荐
aramae5 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
荆棘鸟智能5 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
INGNIGHT9 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_839080549 小时前
C++常见八股
数据结构·c++·算法
青山是哪个青山10 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
mikuyyds10 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
a1879272183110 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历
syagain_zsx11 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_3077791311 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
我是章汕呐12 小时前
地级市能源消耗量及消耗强度数据【2006-2023年】平衡面板
人工智能·经验分享·算法·回归