题目:

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.

题解:

这道题是一道常见的二分查找法的变体题。

要解决这道题,需要明确rotated sorted array的特性,那么就是至少有一侧是排好序的(无论pivot在哪,自己画看看)。接下来就只需要按照这个特性继续写下去就好。以下就以伪代码方法来说明:

  1. 如果target比A[mid]值要小
  2. 如果A[mid]右边有序(A[mid]<A[high])
  3. 那么target肯定不在右边(target比右边的都得小),在左边找
  4. 如果A[mid]左边有序
  5. 那么比较target和A[low],如果target比A[low]还要小,证明target不在这一区,去右边找;反之,左边找。
  6. 如果target比A[mid]值要大
  7. 如果A[mid]左边有序(A[mid]>A[low])
  8. 那么target肯定不在左边(target比左边的都得大),在右边找
  9. 如果A[mid]右边有序
  10. 那么比较target和A[high],如果target比A[high]还要大,证明target不在这一区,去左边找;反之,右边找。

以上实现代码如下所示:

 1    public int search(int [] A,int target){
 2        if(A==null||A.length==0)
 3          return -1;
 4         
 5        int low = 0;
 6        int high = A.length-1;
 7       
 8        while(low <= high){
 9            int mid = (low + high)/2;
10            if(target < A[mid]){
11                if(A[mid]<A[high])//right side is sorted
12                  high = mid - 1;//target must in left side
13                else
14                  if(target<A[low])//target<A[mid]&&target<A[low]==>means,target cannot be in [low,mid] since this side is sorted
15                     low = mid + 1;
16                  else 
17                     high = mid - 1;
18            }else if(target > A[mid]){
19                if(A[low]<A[mid])//left side is sorted
20                  low = mid + 1;//target must in right side
21                else
22                  if(target>A[high])//right side is sorted. If target>A[high] means target is not in this side
23                     high = mid - 1;
24                  else
25                     low = mid + 1;
26            }else
27              return mid;
28        }
29        
30        return -1;
31 }

Reference:http://www.cnblogs.com/ider/archive/2012/04/01/binary_search.html

转载于:https://www.cnblogs.com/springfor/p/3858140.html

Search in Rotated Sorted Array leetcode java相关推荐

  1. leetcode 81 Search in Rotated Sorted Array II ----- java

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

  2. Find Minimum in Rotated Sorted Array leetcode java

    题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ...

  3. LeetCode 33. Search in Rotated Sorted Array

    问题链接 LeetCode 33. Search in Rotated Sorted Array 题目解析 给定一个 "升序" 的 无重复 数组,从中寻找目标值."升序& ...

  4. 【leetcode】Search in Rotated Sorted Array II(middle)☆

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

  5. LeetCode Search in Rotated Sorted Array II

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

  6. LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索

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

  7. LeetCode Online Judge 题目C# 练习 - 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 II

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

  9. 81. Search in Rotated Sorted Array II

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

  10. [算法题] Search in Rotated Sorted Array ii

    题目内容 题目来源:LeetCode Suppose an array sorted in ascending order is rotated at some pivot unknown to yo ...

最新文章

  1. 记录opencv编译过程
  2. matlab 二分法求方程近似解
  3. 自定义logback触发器策略进行日志滚动
  4. 为什么要关闭 MySQL Query Cache?
  5. 还在“葛优躺”?伤腰还容易脊椎变形!
  6. 任意元素的focus伪类
  7. 【渝粤题库】国家开放大学2021春1356高级英语听说(2)题目
  8. oracle 游标 904,如何解决Oracle数据库游标连接超出问题
  9. 复数抽象数据类型C语言,采用C/C++语言如何实现复数抽象数据类型Complex
  10. GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令
  11. 量子计算机 长生不老,这种准粒子“长生不老”,有望提升量子计算机性能
  12. html5总结2000字,建筑识图实训总结2000字6篇范文
  13. 超强学位论文检索工具,你必须拥有!
  14. lch 儿童围棋课堂 启蒙篇 (李昌镐 著)
  15. 自然语言处理nlp小姜机器人(闲聊) nlp_xiaojiang-996station GitHub鉴赏官
  16. 【OpenCV】色彩空间介绍
  17. 如何平衡新老策略的好与坏,一道常见风控送命题解答
  18. 2022电大国家开放大学网上形考任务-民族理论与民族政策非免费(非答案)
  19. 计算机毕业设计ssm基于SSM框架的股票交易系统3cwg3系统+程序+源码+lw+远程部署
  20. 学业水平考试b能上985吗_学业水平测试要求

热门文章

  1. 分数混合运算简便方法_分数混合运算和简便运算
  2. PAT (Basic Level) Practice1022 D进制的A+B
  3. 递归的应用之字符串反转
  4. MySQL数据库设置主从同步
  5. Linux - Unbuntu管理员密码 初次登录 验证错误
  6. JS 回车提交,兼容IE、火狐、Opera、Chrome、Safari
  7. ORACLE学习笔记--性能优化3
  8. 使用开源软件 Mantis 实施缺陷跟踪的成功实践
  9. 命令行管理sql server
  10. Java 开源报表制作