二分法
class Solution:
def findDuplicate(self, nums):
n=len(nums)
left=1
right=n-1
while left<right:
mid=left+(right-left)//2
cnt=0
for num in nums:
if num<=mid:
cnt+=1
if cnt>mid:
right=mid
else:
left=mid+1
return left
快慢指针
class Solution:
def findDuplicate(self, nums) :
fast = 0
slow = 0
while True:
fast = nums[nums[fast]]
slow = nums[slow]
if fast == slow:
find = 0
while find != slow:
find = nums[find]
slow = nums[slow]
return find