1.題目
2.思路
下标 | 1 | 2 | 3 | 4 | |
num | 1 | 3 | 3 | 2 | 5 |
栗子如上,我們可以将數組下标和對應num值看做一個映射關系,而且将num值看做下一個數組的下标值,即組成了 0-》1-》3-》2-》3,最後的3其實就是2指回了中間的3,也就又回到了環狀連結清單題——使用雙指針。
3.代碼
class Solution:
def findDuplicate(self, nums: List[int]) -> int:
slow = 0
fast = 0
slow = nums[slow]
fast = nums[nums[fast]]
while slow != fast:
slow = nums[slow]
fast = nums[nums[fast]]
pre1 = 0
pre2 = slow
while pre1 != pre2:
pre1 = nums[pre1]
pre2 = nums[pre2]
return