解题代码:
classSolution {
public:
int arrayNesting(vector<int>&nums) {
int n=nums.size();
int res=0;
for(int i=0;i<n;i++){
if(nums[i]!=n){
int count=0;
int t=i;
while(nums[t]!=n){
count++;
int k=nums[t];
nums[t]=n;
t=k;
}
res=max(res,count);
}
}
return res;
}
};
解题思路:
题目中有一个数组nums[n],里面分别是0~n-1这n个整数,并且是随机分布的。而实际上题目中所说的S[k],指的就是对于任何一个属于S[k]的元素a,nums[a]也都必然在S[k]中,并且去掉S[k]中任何元素,都将使得上述条件不满足。而题目要求的就是最大的S[k]的元素个数。
于是乎,我从0开始,对于每个0≤i≤n-1,都找到nums[i], nums[nums[i]], nums[nums[nums[i]]]……直至找到i,则这些元素组合起来就是S[i],而根据定义,也等于S[nums[i]],S[nums[nums[i]]]……为了避免重复操作,在每找到一个S[i]中的元素时,我将其赋值为n,使得我在下次遇到的时候不需要做无用功。然后把找到的S[i]中的元素个数进行相比,得出最大的。