Array Nesting

A zero-indexed array A consisting of N different integers is given. The array contains all integers in the range [0, N - 1].

Sets S[K] for 0 <= K < N are defined as follows:

S[K] = { A[K], A[A[K]], A[A[A[K]]], ... }.

Sets S[K] are finite for each K and should NOT contain duplicates.

Write a function that given an array A consisting of N integers, return the size of the largest set S[K] for this array.

Example 1:

Input: A = [5,4,0,3,1,6,2]
Output: 4
Explanation:
A = 5, A = 4, A = 0, A = 3, A = 1, A = 6, A = 2.
One of the longest S[K]:
S = {A, A, A, A} = {5, 6, 2, 0}


Note:

1. N is an integer within the range [1, 20,000].
2. The elements of A are all distinct.

1. Each element of array A is an integer within the range [0, N-1].

public int arrayNesting(int[] nums) {
if(nums == null || nums.length == 0) return 0;

boolean[] visited = new boolean[nums.length];

int maxCount = 0;

for(int i=0;i<nums.length;i++) {

if(visited[i] != true) {
int curCount = 0;
int curIndex = i;
do {
curCount++;
curIndex = nums[curIndex];
visited[curIndex] = true;

} while(curIndex != i);

maxCount = Math.max(maxCount, curCount);
}
}
return maxCount;
}