题意 : 用 nums[i] 的值作为下标, 下一个值为第 nums[i] 的值. 这样不断嵌套, 直到遍历到遍历过的值, 所以也是求数组中存在的环的最大值.
这里需要注意的是, 只要是存在一个环, 无论从哪里进入都是一样的, 所以按顺序遍历, 每个环都找一遍即可; 对于访问过的元素, 直接跳过即可, 因为不会出现两个环部分重合的情况. 这两点是需要想明白的.
class Solution {
public int arrayNesting(int[] nums) {
int maxsize = 0;
for(int i = 0; i < nums.length; i++) {
int size = 0;
for(int j = i; nums[j] >= 0; size++) {
int val = nums[j];
nums[j] = -1;
j = val;
}
maxsize = Math.max(maxsize, size);
}
return maxsize;
}
}