LeetCode: Search in Rotated Sorted Array 解题报告
Search in Rotated Sorted Array
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.

SOLUTION 1:
使用九章算法经典递归模板:
while (l < r - 1) 可以避免mid与left重合的现象。
其实和一般的二分法搜索没有太多区别。
问题是我们每次要找出正常排序的部分,你只需要比较mid, left,如果它们是正序,就代表左边是
正常排序,而右边存在断开的情况,也就是因为Rotated发生不正常序列。
例如:
4567012 如果我们取mid为7,则左边是正常序列,而右边7012不正常。
然后 我们再将target与正常排序的这边进行比较,如果target在左边,就丢弃右边,反之,丢弃
左边。一次我们可以扔掉一半。和二分搜索一样快。
 public class Solution {
     public int search(int[] A, int target) {
         if (A == null || A.length == 0) {
             return -1;
         }
         int l = 0;
         int r = A.length - 1;
         while (l < r - 1) {
             int mid = l + (r - l) / 2;
             if (A[mid] == target) {
                 return mid;
             }
             // left side is sorted.
             // BUG 1: if don't use >= , and use L < r in while loop, than there is some problem.
             if (A[mid] > A[l]) {
                 if (target > A[mid] || target < A[l]) {
                     // move to right;
                     l = mid + 1;
                 } else {
                     r = mid - 1;
                 }
             } else {
                 if (target < A[mid] || target > A[r]) {
                     // move to left;
                     r = mid - 1;
                 } else {
                     l = mid + 1;
                 }
             }
         }
         if (A[l] == target) {
             return l;
         } else if (A[r] == target) {
             return r;
         }
         return -1;
     }
 }
SOLUTION 2:
注意,如果while 循环使用l <= r来卡,则mid有可能会靠到l这这来,所以当判断是否有序时,我们必须使用<=
总之,这份代码就不需要最后再判断l,r的值。
 public int search(int[] A, int target) {
         if (A == null || A.length == 0) {
             return -1;
         }
         int l = 0;
         int r = A.length - 1;
         while (l <= r) {
             int mid = l + (r - l) / 2;
             if (A[mid] == target) {
                 return mid;
             }
             // left side is sorted.
             // BUG 1: if don't use >= , and use L < r in while loop, than there is some problem.
             if (A[mid] >= A[l]) {
                 if (target > A[mid] || target < A[l]) {
                     // move to right;
                     l = mid + 1;
                 } else {
                     r = mid - 1;
                 }
             } else {
                 if (target < A[mid] || target > A[r]) {
                     // move to left;
                     r = mid - 1;
                 } else {
                     l = mid + 1;
                 }
             }
         }
         return -1;
     }
FOLLOWUP:
LeetCode 新题: Find Minimum in Rotated Sorted Array 解题 ...
LeetCode 新题: Find Minimum in Rotated Sorted Array II 解 ...
代码: GitHub代码链接
LeetCode: Search in Rotated Sorted Array 解题报告的更多相关文章
- 【LeetCode】33. Search in Rotated Sorted Array 解题报告(Python & C++)
		作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ... 
- LeetCode: Search in Rotated Sorted Array II  解题报告
		Search in Rotated Sorted Array II Follow up for "LeetCode: Search in Rotated Sorted Array 解题报告& ... 
- 【LeetCode】153. Find Minimum in Rotated Sorted Array 解题报告(Python)
		[LeetCode]153. Find Minimum in Rotated Sorted Array 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode. ... 
- LeetCode:Search in Rotated Sorted Array I II
		LeetCode:Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to y ... 
- [LeetCode] Search in Rotated Sorted Array I (33) && II (81) 解题思路
		33. Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you be ... 
- [leetcode]Search in Rotated Sorted Array II @ Python
		原题地址:https://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/ 题意: Follow up for "Sea ... 
- [LeetCode] Search in Rotated Sorted Array II 在旋转有序数组中搜索之二
		Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ... 
- [LeetCode] Search in Rotated Sorted Array 在旋转有序数组中搜索
		Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ... 
- LeetCode——Search in Rotated Sorted Array II
		Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ... 
随机推荐
- 转载:librdkafka问题总结
			使用librdkafka过程中,遇到的一些问题,解决办法! 暂时先转载:form:http://blog.csdn.net/lybingo/article/details/52808192?locat ... 
- 【转】完全用Linux工作
			我已经半年没有使用 Windows 的方式工作了.Linux 高效的完成了我所有的工作. NU/Linux 不是每个人都想用的.如果你只需要处理一般的事务,打游戏,那么你不需要了解下面这些了. 我不是 ... 
- Groovy 学习手册(5)
			8. 函数式编程 函数式编程(FP)是一种编程风格,侧重于函数和最小化状态的变化(使用不可变的数据结构).它更接近于用数学来表达解决方案,而不是循序渐进的操作. 在函数式编程里,其功能应该是" ... 
- Java NIO.2 —— 文件或目录移动操作
			移动文件树是复制和删除的文件树的结合.实际上,有两种方式来完成文件的移动.一种是使用Files.move(), Files.copy(), 和Files.delete() 这三个方法:另一种是只使用F ... 
- 文件处理-智能检测编码的工具(chardet)
			一.chardet使用方法 问:假如你不知道你要处理的文件是什么编码可怎么办呢? import chardet f = open('通讯录.txt',mode='rb') data = f.read( ... 
- ASP.NET 的ClientIDMode属性
			在ASP.NET 4.0之前我们总是要为控件的ClientID头疼,比如明明一个叫lblName的Label放在一个叫做grd的GridView里面后,在页面上改Label的ID就变成了诸如grd_c ... 
- [转]Http Message结构学习总结
			最近做的东西需要更深入地了解Http协议,故死磕了一下RFC2616-HTTP/1.1协议,主要是了解Http Message结构及每部分含义,在此总结一下,写一个模拟发送HTTP请求的工具,由于时间 ... 
- PHP规范PSR0和PSR4的理解
			一.PSR0简介 下文描述了若要使用一个通用的自动加载器(autoloader),你所需要遵守的规范: 一个完全标准的命名空间(namespace)和类(class)的结构是这样的:\<Vend ... 
- Flowable 的event介绍
			1 事件分为两种,一种是抛出:当流程执行到这时,抛出一个事件:另一种是捕获:当流程执行到这时,他就会等待一个事件的发生. 一个事件需要有事件定义,否则不会做任何“特殊”的事.对于一个流程实例,一个开始 ... 
- Spring Security教程(四):自定义登录页
			在前面的例子中,登陆页面都是用的Spring Security自己提供的,这明显不符合实际开发场景,同时也没有退出和注销按钮,因此在每次测试的时候都要通过关闭浏览器来注销达到清除session的效果. ... 
