题目
思路
根据二分搜索模板,只需要修改一下条件即可
- 判断往哪边搜索
- 判断哪边已经排好序
代码
class Solution:
def search(self, nums: List[int], target: int) -> int:
low = 0
high = len(nums) - 1
return self.binary_search(nums, target, low, high)
def binary_search(self, nums, target, low, high):
if low > high:
return -1
middle = low + int((high - low) / 2)
if nums[middle] == target:
return middle
# 与标准的binary_search相比,多了一层判断,判断哪边已经排好序
if nums[low] <= nums[middle]: # 左边已经排好序
# 在左边
if nums[low] <= target and target < nums[middle]:
return self.binary_search(nums, target, low, middle - 1)
# 在右边
return self.binary_search(nums, target, middle + 1, high)
else: # 右边已经排好序
# 在右边
if nums[middle] < target and target <= nums[high]:
return self.binary_search(nums, target, middle + 1, high)
# 在左边
return self.binary_search(nums, target, low, middle - 1)