565. Array Nesting

来源:互联网 发布:找出数组中重复的元素 编辑:程序博客网 时间:2024/06/10 15:14

1、题目描述

一个数组A,长度为N,内容为0~N-1的数字。返回最长集合S的长度,S[i] = {A[i], A[A[i]], A[A[A[i]]], ... } 。


2、思路

根据上述数组的特点可知,每一个数字跳转到的下一个数字都是不同的,因为数组中每个数字都不一样,

也就是说,把这些跳转关系画成图的话,每一个数字的入度和出度都应该是1.

然后求这个图上的最长的环。

以数组中的每个元素当做S的起点开始统计,当数组中的元素被访问过了之后,将其标为-1,即已经被访问过。

找出最长环即可。


3、代码

int arrayNesting(vector<int>& nums) {        int ans = 0;         for(int i=0;i<nums.size();i++){            int cnt = 0,k=i;            while(nums[k]!=-1){                int a = k;                k = nums[k];                nums[a]=-1;                cnt++;            }            ans=max(ans,cnt);        }        return ans;    }


原创粉丝点击