搜索旋转排序数组——好久没有刷题了,核心是分3段处理,最前的升序段,最后的升序段,需要利用A[0],A[-1],A[mid]和target关系。

62. 搜索旋转排序数组

中文
English

假设有一个排序的按未知的旋转轴旋转的数组(比如,0 1 2 4 5 6 7 可能成为4 5 6 7 0 1 2)。给定一个目标值进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回-1。你可以假设数组中不存在重复的元素。

样例

例1:

输入: [4, 5, 1, 2, 3] and target=1, 
输出: 2.

例2:

输入: [4, 5, 1, 2, 3] and target=0, 
输出: -1.

挑战

O(logN) 时间限制

 

class Solution:
    """
    @param A: an integer rotated sorted array
    @param target: an integer to be searched
    @return: an integer
    """
    def search(self, A, target):
        # write your code here
        if not A:
            return -1
        
        l,r = 0,len(A)-1
        while l+1 < r:
            mid = (l+r) >> 1
            if A[0] < A[mid]:
                if A[0] <= target <= A[mid]:
                    r = mid
                else:
                    l = mid
            else:
                if A[mid] <= target <= A[-1]:
                    l = mid
                else:
                    r = mid
        
        if A[l] == target:
            return l
        
        if A[r] == target:
            return r
        
        return -1

 

posted @ 2021-01-10 23:46  bonelee  阅读(130)  评论(0编辑  收藏  举报