解题报告
565. 数组嵌套
题目链接:565. 数组嵌套
解题思路
从一个点出发,直到最后一个点,与其中经过的点会形成一个闭环,从这个闭环中随便一个点出发都是在这一个闭环中,所以每个点只要遍历一次即可。最后我们只需要找到最大的那个闭环。
解题代码
class Solution {
int Max, Cnt;
int hash[200010];
void dfs(vector<int>& nums, int u, int color){
if(hash[u] != -1){
return ;
}
hash[u] = color;
Cnt ++ ;
dfs(nums, nums[u], color);
}
public:
int arrayNesting(vector<int>& nums) {
int n = nums.size();
int i, color = 0;
Max = 0;
memset(hash, -1, sizeof(hash));
for(int i = 0; i < n; i ++ ){
if(hash[i] == -1){
Cnt = 0;
dfs(nums, i, ++ color);
Max = max(Max, Cnt);
}
}
return Max;
}
};
401. 二进制手表
题目链接:401. 二进制手表
解题思路
解题代码
1079. 活字印刷
题目链接:1079. 活字印刷
解题思路
解题代码
1219. 黄金矿工
题目链接:1219. 黄金矿工
解题思路
解题代码