dfs|位运算
lcr007

class Solution {
public:
int singleNumber(vector<int>& nums) {
int sunm=0,ret=0,x=0;
for(int i=0;i<32;i++)
{
int sum=0;//每次循环 重置sum
//数的每一位进行处理
for(auto& c:nums)
{
sum+=(c>>i)&1;
}
x=sum%3;
ret|=(x<<i);
}
return ret;
}
};
lc1376
树的最大深度dfs
自底向上
maxPathSum = max(maxPathSum, dfs(y))
return maxPathSum + informTime[x];
class Solution {
public:
int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) {
vector<vector<int>> g(n);
for (int i = 0; i < n; i++) {
if (manager[i] >= 0) {
g[manager[i]].push_back(i); // 建树
}
}
auto dfs = [&](this auto&& dfs, int x) -> int {
int maxPathSum = 0;
for (int y : g[x]) { // 遍历 x 的儿子 y(如果没有儿子就不会进入循环)
maxPathSum = max(maxPathSum, dfs(y));
}
return maxPathSum + informTime[x];
};
return dfs(headID); // 从根节点 headID 开始递归
}
};
