博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode: Search in Rotated Sorted Array
阅读量:4982 次
发布时间:2019-06-12

本文共 1457 字,大约阅读时间需要 4 分钟。

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.

难度:80.第一次做这道题比较难想到。参看网上的一些想法,binary search的精髓在于target与mid比了之后可以甩掉一半的元素,顺着这个思路想,Rotated array中点两边的元素不会都是无序的,一定有一边是有序的,具体是mid左边还是右边,取决于mid元素的值与右边缘的值孰大孰小。

具体来说,假设数组是A,每次左边缘为l,右边缘为r,还有中间位置是m。在每次迭代中,分三种情况:

(1)如果target==A[m],那么m就是我们要的结果,直接返回;
(2)如果A[m]<A[r],那么说明从m到r一定是有序的(没有受到rotate的影响),那么我们只需要判断target是不是在m到r之间,如果是则把左边缘移到m+1,否则就target在另一半,即把右边缘移到m-1。
(3)如果A[m]>=A[r],那么说明从l到m一定是有序的,同样只需要判断target是否在这个范围内,相应的移动边缘即可。

根据以上方法,每次我们都可以切掉一半的数据,所以算法的时间复杂度是O(logn),空间复杂度是O(1)。

1 public class Solution { 2     public int search(int[] A, int target) { 3         if (A == null || A.length == 0) { 4             return -1; 5         } 6         int l = 0; 7         int r = A.length - 1; 8         while (l <= r) { 9             int mid = (l + r) / 2;10             if (A[mid] == target) return mid; 11             else if (A[mid] < A[r]) {12                 if (target>A[mid] && target<=A[r]) {13                     l = mid + 1;14                 }15                 else {16                     r = mid - 1;17                 }18             }19             else {20                 if (target>=A[l] && target

 需要小心的是第12行和第20行的<= 以及>=,我曾经漏了这个,犯了错误

转载于:https://www.cnblogs.com/EdwardLiu/p/3978881.html

你可能感兴趣的文章
剑指Offer的学习笔记(C#篇)-- 反转链表
查看>>
百度star2012初赛第一场的题目
查看>>
武汉第二十七天
查看>>
最长公共子序列
查看>>
MFC 鼠标去留
查看>>
【原创】关于oracle11G空表无法导出问题的解决方法
查看>>
16进制的简单运算
查看>>
速读《Javascript模式》(一)(简介、var的变量提升以及es6新规范的let)
查看>>
DM8168集成图像算法
查看>>
GDI编程小结
查看>>
nalply/crtmpserver
查看>>
jquery 遍历节点
查看>>
工具选择
查看>>
(转)C#实现RSA非对称加密解密
查看>>
迅为iTOP-4412开发板-Android4.4-固定MAC
查看>>
centos下,安装MySQL以及配置远程连接等
查看>>
获取硬盘和CPU的序列号
查看>>
Python全栈开发 day2 - 数据类型详解
查看>>
葡萄城报表的数据可视化分析
查看>>
(转)面向对象的三大基石(封装,继承和复合,多态)
查看>>