二分查找写递归就没什么意义了,写个非递归的
class Solution(object):
def singleNonDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
def bin_search(l,r):
mid =(l+r)/2
if nums[mid]==nums[mid-1]:
if (l-mid)%2:#0,1,2,F
return bin_search(mid+1,r)
else:
return bin_search(l,mid-2)
elif mid+1!=len(nums) and nums[mid]==nums[mid+1]:
if (l-mid)%2:#0,1,2,F,往前找
return bin_search(l,mid-1)
else:
return bin_search(mid+2,r)
else:return nums[mid]
l,r=0,len(nums)-1
if not r:return nums[0]
return bin_search(l,r)
非递归也没有明显快起来?
class Solution(object):
def singleNonDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
l,r=0,len(nums)
if r==1:return nums[0]
while l<=r:
mid=(l+r)/2
if nums[mid]==nums[mid-1]:
if (l-mid)%2:#0,1,2,F
l=mid+1
else:
r=mid-2
elif mid+1!=len(nums) and nums[mid]==nums[mid+1]:
if (l-mid)%2:#0,1,2,F,往前找
r=mid-1
else:
l=mid+2
else:
return nums[mid]