class Solution:
def search(self, nums: List[int], target: int) -> int:
left,right=0,len(nums)-1
while(left<=right):
mid=(left+right)//2
print(nums[mid])
#如果中间的数字比目标大 有两种可能 可能目标在左边或者在右边 如果目标大于right那么肯定在左边 用二分法就行
#如果目标小于right并且中间的数字也比right小
#如果目标小于right 那么肯定在右边 left至少是mid+1
if nums[mid]>target:
if target>nums[right]:
right=mid-1
elif nums[right]>target:
if nums[mid]<nums[right]:
right=mid-1
else:
left=mid+1
else:
return right
#如果中间的数字比目标小,那么目标可能在右边也可能在左边
#如果目标比right小 那么一定在右边
#如果目标比right大 那么一定在左边 但是不知道在中间数字的左边还是右边 如果中间的数字比right小
elif nums[mid]<target:
if target<nums[right]:
left=mid+1
elif target>nums[right]:
if nums[mid]<nums[right]:
right=mid-1
else:
left=mid+1
else:
return right
else:
return mid
return -1
在旋转数组中搜索 二分法
最新推荐文章于 2023-09-03 18:08:01 发布