1、题目
565. 数组嵌套 - 力扣(LeetCode) (leetcode-cn.com)
2、实现
(1)思路
- 每一个元素都尝试嵌套搜索,每搜索一个就让统计长度+1。
- 同时访问过的元素都覆盖为-1作为标记,代表访问过了,减少重复访问。
- 每一个位置上能搜索最深的嵌套深度和前序的maxLen作比较,取最大的。
- 最后遍历完一遍数组,maxLen就对应最大集合的长度了,即为所求。
(2)代码
/**
* @param {number[]} nums
* @return {number}
*/
var arrayNesting = function(nums) {
let maxLen = 0;
// 遍历数组
for(let i=0; i<nums.length; i++) {
// 外层循环控制起始元素
let count = 0;
// 内存循环实现找到整个S
for(let j=i; nums[j] !== -1;) {
count++;
// 下一个元素的索引为flag
let flag = nums[j];
// 将遍历过的元素标记为-1
nums[j] = -1;
// 将指向下一个元素
j = flag;
}
// 选择最大的集合长度
maxLen = Math.max(maxLen, count);
}
return maxLen;
};
3、参考
【300题刷题挑战】leetcode力扣565 数组嵌套 arrayNesting 第一百六十七题 | 数组和矩阵_哔哩哔哩_bilibili