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