33. 搜索旋转排序数组
class Solution:
def search(self, nums: List[int], target: int) -> int:
if not nums:
return -1
# if target<nums[0]:
# start=0
# end=len(nums)-1
# while start<=end:
# mid=(start+end)//2
# if target <nums[start] and nums[mid]>=nums[start]:
# start=mid+1
# else:
# if target>nums[mid]:
# start=mid+1
# elif target<nums[mid]:
# end=mid-1
# else:
# return mid
# elif target>nums[0]:
# start=0
# end=len(nums)-1
# while start<=end:
# mid=(start+end)//2
# if target >nums[start] and nums[mid]<=nums[start]:
# if mid==start:
# start+=1
# else:
# end=mid-1
# # end=mid-1
# else:
# if target>nums[mid]:
# start=mid+1
# elif target<nums[mid]:
# end=mid+1
# else:
# return mid
# elif target==nums[0]:
# return 0
# return -1
start=0
end=len(nums)-1
while start<=end:
mid=(start+end)//2
if target==nums[start]:
return start
if target <nums[start] and nums[mid]>=nums[start]:
start=mid+1
elif target >nums[start] and nums[mid]<=nums[start]:
if mid==start:
start+=1
else:
end=mid-1
# end=mid-1
else:
if target>nums[mid]:
start=mid+1
elif target<nums[mid]:
end=mid-1
else:
return mid
return -1
- 上面被注释掉的憨憨代码就是考试中写的,只考虑了一下即start==0得时候,后面得没考虑,这属实太憨了,记录一下避免以后犯同样错误,考虑问题要再全面一些!