class Solution {
int len;
public int arrayNesting(int[] nums) {
len = nums.length;
int ans = 0;
for(int i = 0;i < len;i ++) {
if(nums[i] != len) {
ans = Math.max(ans, dfs(i, nums));
}
}
return ans;
}
int dfs(int index, int[] nums) {
int value = nums[index];
if(value == len) {
return 0;
}
nums[index] = len;
return 1 + dfs(value, nums);
}
}
变种补充:如果去掉包含0到N - 1的所有整数的条件,采用记忆化dfs
class Solution {
int[] ans;
public int arrayNesting(int[] nums) {
int len = nums.length;
ans = new int[len];
int result = 0;
for(int i = 0;i < len;i ++) {
if(ans[i] == 0) {
result = Math.max(result, dfs(i, nums));
}
}
return result;
}
int dfs(int index, int[] nums) {
int value = nums[index];
if(value == -1) {
return ans[index];
}
nums[index] = -1;
ans[index] = 1 + dfs(value, nums);
return ans[index];
}
}