class Solution:
def search(self, nums: List[int], target: int) -> int:
if not nums: return -1
l = 0; r = len(nums) - 1
# 无重复数,在有序区间查找
while l <= r:
m = l + r >> 1
if nums[m] == target: return m # 因为存在找不到的情况,故在此return
# 可以用nums[l]和nums[m]判断有序,也可以用nums[m]和nums[r]判断有序
elif nums[l] <= nums[m]: # 左半部分是有序
# target落在左半部分有序区域内,去掉m
if nums[l] <= target < nums[m]:
r = m - 1
else:
l = m + 1
else: # 右半部分是有序
# target落在右半部分有序区域内,去掉m
if nums[m] < target <= nums[r]:
l = m + 1
二.二分查找(排序旋转数组)
于 2022-01-08 20:27:37 首次发布