[LeetCode] Search in Rotated Sorted Array [35]

[LeetCode] Search in Rotated Sorted Array [35]

大家好,又见面了,我是全栈君。

题目

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

原题链接(点我)

解题思路

旋转数组中的查找。

[1, 2, 3, 4, 5, 6]的一个旋转数组为[4, 5, 6, 1, 2, 3]。在旋转数组中寻找一个数。
最直接的方法。一次遍历。时间复杂度O(n)。可是既然是一个部分有序的数组,那么对于有序的部分我们能够想方法用二分查找。这个能够提高效率。

代码实现

class Solution {
public:
    int search(int A[], int n, int target) {
        if(A==NULL || n<=0) return -1;
        int begin = 0, end = n-1;
        while(begin<=end){
            int mid = begin + (end-begin)/2;
            if(A[mid] == target)
                return mid;
            if(A[mid] > A[end]){
                //前半段
                if(A[begin]<=target && A[mid] > target){
                    //target 在 begin 和 mid-1 之间
                    end = mid-1;
                }else{
                    begin = mid+1;
                }
            }else if(A[mid] < A[end]){
                //在后半段
                if(A[mid] < target && A[end] >=target){
                    //target 在 mid+1 和 end 之间
                    begin = mid+1;
                }else{
                    end = mid-1;
                }
            }else{
                // 由于这个题数组中不含有反复元素,此时begin==end==mid而且A[mid]!=target。所以不存在
                break;
            }
        }
        return -1;
    }
};

假设你认为本篇对你有收获,请帮顶。


另外,我开通了微信公众号–分享技术之美,我会不定期的分享一些我学习的东西.
你能够搜索公众号:
swalge
 或者扫描下方二维码关注我
[LeetCode] Search in Rotated Sorted Array [35]
(转载文章请注明出处: http://blog.csdn.net/swagle/article/details/30471141 )

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115876.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Linux创建软连接是红色的_ln命令建立软链接

    Linux创建软连接是红色的_ln命令建立软链接ln为某一个文件在另外一个位置建立一个同不的链接,这样操作之后就不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接它就可以,不必重复的占用磁盘空间1、参数介绍ln参数是-s–symbolic:表示符号。使用-s参数它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间不使用-s参数,它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。2、建立软链语法ln-s源文件

  • socket编程原理「建议收藏」

    socket编程原理「建议收藏」socket编程原理1、问题的引入1)普通的I/O操作过程:UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-c

  • 九九乘法表java代码_java怎么实现九九乘法表

    九九乘法表java代码_java怎么实现九九乘法表java实现九九乘法表的方法:构建两层嵌套的for循环,外层for循环用于控制行,内层for循环用于控制某行上的乘法表达式,每行输出完毕后进行换行即可。思路:构建两层嵌套的for循环:外层循环用于控制行,内层循环用于控制某行上的乘法表达式。需要注意的是,每行输出完毕后,需要换行。代码实现:publicclassTest1{publicstaticvoidmain(String[]…

  • 用new创建数组

    用new创建数组用new创建数组用new创建数组的优势由于new创建的对象是在运行时确立的,所以有着具体情况具体分析的优点,那么什么叫做具体情况具体分析呢?我觉得c++primerplus的一个例子十分贴切——比如你在度假,已经做好每天的参观计划,可突然有一天天气不好或你心情不好,此时你就不想参观了,如果此时是在编译状态,系统是不允许的,你必须按照计划去参观,但运行时状态,系统是允许的,此时你就可以呆在酒店尽情的玩耍了。用new创建数组也有此优点,即数组长度可以根据情况而定。比如说创建10个元素的数组,可以如下代

  • 深度置信网络matlab语言实现(tcc信念)

    【实例简介】深度信念网络,有代码,有实例,有数据。用于深度网络预训练。【实例截图】【核心代码】DBN代码`–DBN代码|–Readme.txt|–isir例子RBM||–adealdata.m||–amydata.mat||–apretrain.m||–checkrbmtrain.m||–grbmtrain.m||–iris….

  • python读取log文件_python分析log日志

    python读取log文件_python分析log日志一、原理QXDM抓取log为isf格式,需要用QCAT打开进行分析,如果需要自动分析QXDM抓取的log,一个可行的方法为调用QCAT的COM接口打开isf文件并进行分析。QCAT6.X支持基于COM的接口调用,允许用户通过Perl、VBScript、JavaScript、Python等脚本语言调用应用。具体调用方法在QCAT安装后的《QCATUserGuide》用户手册中,第六章S…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号