class Solution {
public:
int arrayNesting(vector<int>& nums) {
}
};
565. 数组嵌套
索引从0
开始长度为N
的数组A
,包含0
到N - 1
的所有整数。找到最大的集合S
并返回其大小,其中 S[i] = {A[i], A[A[i]], A[A[A[i]]], ... }
且遵守以下的规则。
假设选择索引为i
的元素A[i]
为S
的第一个元素,S
的下一个元素应该是A[A[i]]
,之后是A[A[A[i]]]...
以此类推,不断添加直到S
出现重复的元素。
示例 1:
输入: A = [5,4,0,3,1,6,2] 输出: 4 解释: A[0] = 5, A[1] = 4, A[2] = 0, A[3] = 3, A[4] = 1, A[5] = 6, A[6] = 2. 其中一种最长的 S[K]: S[0] = {A[0], A[5], A[6], A[2]} = {5, 6, 2, 0}
提示:
1 <= nums.length <= 105
0 <= nums[i] < nums.length
A
中不含有重复的元素。原站题解
python3 解法, 执行用时: 216 ms, 内存消耗: 22.4 MB, 提交时间: 2022-11-29 12:30:36
class Solution: def arrayNesting(self, nums: List[int]) -> int: ans, n = 0, len(nums) for i in range(n): cnt = 0 while nums[i] < n: num = nums[i] nums[i] = n i = num cnt += 1 ans = max(ans, cnt) return ans
golang 解法, 执行用时: 100 ms, 内存消耗: 9 MB, 提交时间: 2022-11-29 12:30:22
func arrayNesting(nums []int) (ans int) { n := len(nums) for i := range nums { cnt := 0 for nums[i] < n { i, nums[i] = nums[i], n cnt++ } if cnt > ans { ans = cnt } } return }
javascript 解法, 执行用时: 92 ms, 内存消耗: 50.9 MB, 提交时间: 2022-11-29 12:30:05
/** * @param {number[]} nums * @return {number} */ var arrayNesting = function(nums) { let ans = 0, n = nums.length; for (let i = 0; i < n; ++i) { let cnt = 0; while (nums[i] < n) { const num = nums[i]; nums[i] = n; i = num; ++cnt; } ans = Math.max(ans, cnt); } return ans; };
javascript 解法, 执行用时: 108 ms, 内存消耗: 52.8 MB, 提交时间: 2022-11-29 12:29:53
/** * @param {number[]} nums * @return {number} */ var arrayNesting = function(nums) { let ans = 0, n = nums.length; const vis = new Array(n).fill(0); for (let i = 0; i < n; ++i) { let cnt = 0; while (!vis[i]) { vis[i] = true; i = nums[i]; ++cnt; } ans = Math.max(ans, cnt); } return ans; };
golang 解法, 执行用时: 92 ms, 内存消耗: 8.4 MB, 提交时间: 2022-11-29 12:29:38
func arrayNesting(nums []int) (ans int) { vis := make([]bool, len(nums)) for i := range vis { cnt := 0 for !vis[i] { vis[i] = true i = nums[i] cnt++ } if cnt > ans { ans = cnt } } return }
python3 解法, 执行用时: 240 ms, 内存消耗: 25.7 MB, 提交时间: 2022-11-29 12:29:22
class Solution: def arrayNesting(self, nums: List[int]) -> int: ans, n = 0, len(nums) vis = [False] * n for i in range(n): cnt = 0 while not vis[i]: vis[i] = True i = nums[i] cnt += 1 ans = max(ans, cnt) return ans