from typing import List
# 二分法classSolution:deffindDuplicate(self, nums: List[int])->int:
n =len(nums)
left =0
right = n -1
nums.sort()while left < right:
mid = left +(right - left)//2
cnt =0for num in nums:if mid >= num:
cnt +=1if cnt > mid:
right = mid
else:
left = mid +1return nums[left]
2.2 直接法
from typing import List
classSolution:deffindDuplicate(self, nums: List[int])->int:
res =set()for num in nums:if num notin res:
res.add(num)else:return num
2.3 字典法
from typing import List
classSolution:deffindDuplicate(self, nums: List[int])->int:
n =len(nums)if n ==0:return
res ={}for i inrange(n):
res[nums[i]]= res.setdefault(nums[i],0)+1for k, v in res.items():if v >=2:return k