33
题目描述;
升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] )。
请你在数组中搜索 target ,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。
示例:
解答:
class Solution:
def search(self, nums: List[int], target: int) -> int:
'''
①
for i in range(len(nums)):
if nums[i]==target:
return i
return -1
②
if target in nums:
return nums.index(target)
else:
return -1
'''
if len(nums)==0:
return -1
left,right=0,len(nums)-1
while left<right:
mid=(left+right)//2
if nums[mid]<nums[right]: #[mid,right]部分有序
if nums[mid]<target<=nums[right]:
left=mid+1
else:
right=mid
else: #[1,mid]有序
if nums[left]<=target<=nums[mid]: