题目描述
给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
思路
二分查找,但并不是常规的对数组索引二分查找,而是对数组中的数值来做
- 1到n取中位数mid
- 遍历数组,记录数组中小于mid数的个数
- 如果次数大于等于mid,则说明mid的左边存在重复数
- 否则,则说明mid左边的是安全的
class Solution(object):
def findDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums:
return None
left=1
right=len(nums)-1
while left<right:
mid=left+(right-left+1)/2
count=0
for i in nums:
if i<mid:
count+=1
if count>=mid:
right=mid-1
else:
left=mid
return left