class Solution:
def search(self, nums: List[int], target: int) -> int:
l, r = 0, len(nums) # [l, r) 左闭右开区间
while l < r:
m = l + (r - l) // 2
if nums[m] == target:
return m
if nums[0] < nums[m]:
# 此时 m 左边是有序的
if nums[l] <= target < nums[m]:
# 如果 target 在有序部分, 即在左侧
r = m
else:
l = m + 1
else:
# 此时 m 右边是有序的
if nums[m] < target <= nums[r - 1]: # r 是开区间, 所以 - 1
# 如果 target 在有序部分, 此时在右侧
l = m + 1
else:
r = m # 右边界
return -1