首先找到旋转位置的索引
根据找到的索引求出旋转的长度,并将数组拼接为原来升序的数组
判断target与数组头尾的大小关系
二分查找target的位置,同时通过之前得到的旋转的长度计算在原始数组中的索引
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param nums int整型一维数组
# @param target int整型
# @return int整型
#
class Solution:
def search(self , nums: List[int], target: int) -> int:
# write code here
idx=-1
for i in range(len(nums)-1):
if nums[i+1]<nums[i]:
idx=i+1
break
gap=len(nums)-idx
if idx!=-1:
nums=nums[idx:]+nums[:idx]
if target<nums[0] or target>nums[-1]:
return -1
l,r=0,len(nums)-1
while l<=r:
mid=(l+r)//2
if nums[mid]>target:
r=mid-1
elif nums[mid]<target:
l=mid+1
else:
if idx!=-1:
if mid>=gap:
return mid-gap
else:
return idx+mid
else:
return mid
return -1