LeetCode 565. Array Nesting
| 考点 | 难度 |
|---|---|
| DFS | Medium |
题目
You are given an integer array nums of length n where nums is a permutation of the numbers in the range [0, n - 1].
You should build a set s[k] = {nums[k], nums[nums[k]], nums[nums[nums[k]]], … } subjected to the following rule:
The first element in s[k] starts with the selection of the element nums[k] of index = k.
The next element in s[k] should be nums[nums[k]], and then nums[nums[nums[k]]], and so on.
We stop adding right before a duplicate element occurs in s[k].
Return the longest length of a set s[k].
思路
identify cycles, after visiting a number set the number to -1 to achieve O(1) memory complexity. Keep the longest cycle.
答案
class Solution:
def arrayNesting(self, nums: List[int]) -> int:
ans = 0
for x in nums:
if x == -1: continue
cnt = 0
while nums[x] != -1:
cnt += 1
nums[x], x = -1, nums[x]
ans = max(ans, cnt)
return ans
这道题是关于数组操作的,要求找到一个整数数组中,按照特定规则构成的最长子集。具体规则是从数组的某个元素开始,连续选取未重复的元素,直到遇到重复的元素为止。解决方案是遍历数组,用一个计数器记录当前子集的长度,并用一个标记将访问过的元素设为-1,以避免重复。最后返回最长子集的长度。


被折叠的 条评论
为什么被折叠?



