搜索旋转排序数组——好久没有刷题了,核心是分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) 时间限制

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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 @   bonelee  阅读(130)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2019-01-10 kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归
2019-01-10 BFPRT 算法 (TOP-K 问题)——本质就是在利用分组中位数的中位数来找到较快排更合适的pivot元素
2018-01-10 dns tunnel 使用 nishang 下载TXT里的cmd(TXT里)实现CC command+ ceye实现数据外发
2018-01-10 Powershell 渗透测试工具-Nishang
2018-01-10 powershell渗透工具——PowerShell攻防进阶篇:nishang工具用法详解
2017-01-10 elasticsearch负载均衡节点——客户端节点 node.master: false node.data: false 其他配置和master 数据节点一样
2017-01-10 Elasticsearch压缩索引——lucene倒排索引本质是列存储+使用嵌套文档可以大幅度提高压缩率
点击右上角即可分享
微信分享提示