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 解题报告的更多相关文章

  1. 【LeetCode】33. Search in Rotated Sorted Array 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  2. LeetCode: Search in Rotated Sorted Array II 解题报告

    Search in Rotated Sorted Array II Follow up for "LeetCode: Search in Rotated Sorted Array 解题报告& ...

  3. 【LeetCode】153. Find Minimum in Rotated Sorted Array 解题报告(Python)

    [LeetCode]153. Find Minimum in Rotated Sorted Array 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode. ...

  4. 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 ...

  5. [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 ...

  6. [leetcode]Search in Rotated Sorted Array II @ Python

    原题地址:https://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/ 题意: Follow up for "Sea ...

  7. [LeetCode] Search in Rotated Sorted Array II 在旋转有序数组中搜索之二

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  8. [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 ...

  9. LeetCode——Search in Rotated Sorted Array II

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

随机推荐

  1. java struts2入门学习--基于xml文件的声明式验证

    一.知识点总结 后台验证有两种实现方式: 1 手工验证顺序:validateXxx(针对Action中某个业务方法验证)--> validate(针对Action中所有的业务方法验证) 2 声明 ...

  2. OAuth的机制原理讲解及开发流程(转)

    1.OAuth的简述 OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全.开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是 ...

  3. TensorFlow Google大会总结

    一.概述 介绍TPU,需要使用XLA编译,否则没有做内部优化,无法达到加速的效果: TPU相关的性能分析器: 二.新版本的输入库 之前TensorFlow的输入方式: feed_dict: 太过于低效 ...

  4. 【Oracle】Oracle中使用转义字符

    1.Oracle 特殊字符 转义 关键词:oracle    转义                                           环境:oracle9i plsql 在plsql ...

  5. ActiveX IE保护模式下的低权限操作路径及Windows操作系统特殊路径

    参考理解IE保护模式:https://blog.csdn.net/xt_xiaotian/article/details/5336809 文件帮助类: public class FileHelp { ...

  6. 《JAVA与模式》之原型模式(转载)

    原型模式其实就是java的拷贝机制 原文出处:http://blog.csdn.net/zhengzhb/article/details/7393528   定义:用原型实例指定创建对象的种类,并通过 ...

  7. Linux中断的系统调用

    早期UNIX系统的一个特性是:如果在进程执行一个低速系统调用而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行.该系统调用返回出错,其errno设置为EINTR.这样处理的理由是:因为一个信号 ...

  8. CTreeCtrl鼠标双击响应函数中怎么知道双击的是哪个子项?

    原帖链接: http://bbs.csdn.net/topics/310185501 楼主: CTreeCtrl鼠标双击响应函数中怎么知道双击的是哪个子项? 6楼: CPoint pt;GetCurs ...

  9. Django form入门详解--2

    调整form的输出格式: 默认情况下form的格式化输出是基本table的样式的.但是django中还是为form提供发别的输出样式 1.默认的table样式输出 <html> <h ...

  10. laravel用redis保存session遇到的坑,没报错,但redis-cli就是查不到

    laravel用redis保存session遇到的坑, 配置redis存储session流程是这样的 在.evn文件中把session驱动和连接改为了redis的 如下: SESSION_DRIVER ...