LeetCode

来源:互联网 发布:安卓手机优化软件 知乎 编辑:程序博客网 时间:2024/06/08 04:47

解题代码:

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]中的元素个数进行相比,得出最大的。

原创粉丝点击