沒重複數字
class Solution:
def search(self, nums: List[int], target: int) -> bool:
left,right=0,len(nums)-1
while left<=right:
mid=(left+right)//2
print(nums[left],nums[right],nums[mid])
if nums[mid]<target:
if nums[right]>target:
left=mid+1
elif nums[right]<target:
if nums[mid]<nums[right]:
right=mid-1
else:
left=mid+1
else:
return True
elif nums[mid]>target:
if nums[right]>target:
if nums[right]>nums[mid]:
right=mid-1
else:
left=mid+1
elif nums[right]<target:
right=mid-1
else:
return True
else:
return True
return False
有重複數字
class Solution:
def search(self, nums: List[int], target: int) -> bool:
left,right=0,len(nums)-1
while left<=right:
mid=(left+right)//2
print(nums[left],nums[right],nums[mid])
if nums[mid]<target:
if nums[right]>target:
left=mid+1
elif nums[right]<target:
if nums[mid]<nums[right]:
right=mid-1
elif nums[mid]>nums[right]:
left=mid+1
else:
right-=1
else:
return True
elif nums[mid]>target:
if nums[right]>target:
if nums[right]>nums[mid]:
right=mid-1
elif nums[right]<nums[mid]:
left=mid+1
else:
right-=1
elif nums[right]<target:
right=mid-1
else:
return True
else:
return True
return False
兩者的區別在於如果有重複數字的話,如果mid處的數字正好等於right處的數字,那麼可能在mid的左邊也可能在mid的右邊,但是right肯定不是了,right-=1