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得時候,後面得沒考慮,這屬實太憨了,記錄一下避免以後犯同樣錯誤,考慮問題要再全面一些!