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