zoukankan      html  css  js  c++  java
  • 搜索旋转排序数组——好久没有刷题了,核心是分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
    
  • 相关阅读:
    Java的注释
    输入一个字符串并判断是否是对称字符串
    将数组的数据按照指定格式进行拼接并打印
    对输入的电话号码中间4位进行屏蔽
    统计输入的大小写字母个数
    svnadmin
    jenkins
    travis-ci
    metamodel
    KISSY
  • 原文地址:https://www.cnblogs.com/bonelee/p/14260231.html
Copyright © 2011-2022 走看看