1、题目描述
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7]
可能变为 [4,5,6,7,0,1,2]
)。
搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1
。
你可以假设数组中不存在重复的元素。
你的算法时间复杂度必须是 O(log n) 级别。
示例 1:
输入: nums = [4,5,6,7,0,1,2]
, target = 0
输出: 4
示例 2:
输入: nums = [4,5,6,7,0,1,2]
, target = 3
输出: -1
2、题解
2.1、解法一
class Solution: def search(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ n = len(nums) first,last = 0, n-1 while first <= last: mid = int((first + last)/2) # print(mid) if nums[mid] == target: return mid elif nums[first] > nums[mid]: # 旋转点在中线左边 if target > nums[mid]: # 目标值大于中间值 # print("1") if target == nums[first]: # == return first elif target > nums[first]: # > last = mid - 1 else: # < first = mid + 1 else: # print("2") # 目标值小于中间值 last = mid - 1 print(first,last) else: # 旋转点在中线右边 if target > nums[mid]: # 目标值大于中间值 first = mid + 1 else: if target == nums[first]: return first elif target > nums[first]: last = mid - 1 else: first = mid + 1 print(first,last) return -1