关键点(排除冗余计算点)
当我们向对应于任何索引的集合添加元素 nums [j]nums[j] 时,我们将其位置标记为在 visitedvisited 数组中访问。这样做是为了在将来选择此索引作为起始索引时,我们不会进行冗余 countcount 计算,因为我们已经考虑了与此索引链接的元素。
class Solution {
public int arrayNesting(int[] nums) {
//visited标记在每次迭代中访问过的结点
int[] visited = new int[nums.length];
int res = 0;
for(int i = 0;i<nums.length;i++){
if(visited[i] ==0)
{
int tmp = nestLength(nums,i,visited);
if(tmp>res) res = tmp;
}
}
return res;
}
public int nestLength(int[] nums,int index,int[] visited){
Set<Integer> set = new HashSet<>();
int num = nums[index];
while(!set.contains(num)){
set.add(num);
visited[num] = 1;
index = nums[index];
num = nums[index];
}
return set.size();
}
}