题目描述
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。
你可以假设数组中不存在重复的元素。
你的算法时间复杂度必须是 O(log n) 级别。
示例:
输入: nums = [4,5,6,7,0,1,2], target = 0
 输出: 4
python代码
解法1:
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        try:
            return nums.index(target)
        except:
            return -1解法2:
 1.先判断哪边没有旋转;
 2.在没有旋转的部分做判断,如果target是否在其中,在则缩小范围为该部分,不在则缩小范围到另一部分;
 3.当high low 长度为2的时候跳出循环(不需要做mid+1的复杂难懂的技巧跳出循环);
 4.比较high low 与target;
 5.返回符合的值。
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        n = len(nums)
        if n == 0:
            return -1
        low = 0
        high = n - 1
        while low < high - 1:
            mid = (low + high)//2
            # The left is not rotated
            if nums[low] < nums[mid]:
                if target <= nums[mid] and target >= nums[low]:
                    high = mid
                else: 
                    low = mid
            else:
                if target <= nums[high] and target >= nums[mid]:
                    low = mid
                else:
                    high = mid
        if nums[high] == target:
            return high
        if nums[low] == target:
            return low
        return -1                
                










