33. Search in Rotated Sorted Array
solution
class Solution:
def search(self, nums: List[int], target: int) -> int:
# 左闭右闭. 先决定是那种类型的选择,再决定是在哪一部分
l = 0
r = len(nums) - 1 # 因为涉及到nums[r]采用左闭右闭
while l <= r:
m = l + (r - l) // 2
if nums[m] == target:
return m
# 先判断mid位于哪半边
elif nums[m] >= nums[l]: # mid==left的话,mid确实位于左半边. 这里的=必须与左边判断,如果nums=[3, 1],target=1的话
if nums[l] <= target < nums[m]: # 这里的=,之前如果nums[mid]==target已返回,因此二者不可能相等,但是可能等于左边界
r = m - 1
else:
l = m + 1
else:
if nums[m] < target <= nums[r]: # 注意这里的=,由于左闭右闭, 因此上面和这里都有=,mid没有是因为最前面等于已返回
l = m + 1
else:
r = m - 1
return -1follow up
Previous34. Find First and Last Position of Element in Sorted ArrayNext81. Search in Rotated Sorted Array II
Last updated