任务描述
思路
- 先找出旋转点,再分别二分法
实现代码
class Solution:
def search(self, nums,target):
if not nums:
return -1
l, h = 0, len(nums) - 1
while l < h:
mid = (l + h) // 2
if nums[mid] > nums[h]:
l=mid+1
else:
h=mid
idx=h
temp=self.BinarySearch(nums[:idx],target)
if temp !=-1:
return temp
else:
temp = self.BinarySearch(nums[idx:],target)
if temp ==-1:
return -1
return idx+temp
def BinarySearch(self,List, t):
low,high=0,len(List)-1
mid = (low + high) // 2
while low <= high:
if List[mid] == t:
return mid
elif List[mid] < t:
low = mid+1
elif List[mid] > t:
high = mid-1
mid = (low + high) // 2
return -1