思路:二分查找
用nums[mid]>=nums[0]
判断左边是顺序的,然后再区间内寻找
注意大于等于,而不是大于
比如倒叙情况,nums = [3,1],target = 1
,得到mid=0
,不满足nums[mid]>nums[0]
,进入“右边顺序”的循环,也不满足nums[mid]<target
class Solution:
def search(self, nums: List[int], target: int) -> int:
if not nums:
return -1
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid]==target:
return mid
if nums[mid]>=nums[0]:#左边是顺序的,注意大于等于
if nums[mid]>target>=nums[0]:
right=mid-1
else:
left=mid+1
else:#右边顺序
if nums[mid]<target<=nums[len(nums)-1]:
left=mid+1
else:
right=mid-1
return -1