直接上代码

  1. /**
  2. * Created by lvhao on 2017/6/30.
  3. * Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
  4.  
  5. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
  6.  
  7. You are given a target value to search. If found in the array return its index, otherwise return -1.
  8.  
  9. You may assume no duplicate exists in the array.
  10. 思路是目标值肯定在一个升序子序列中(可能子序列很短,但是肯定存在),目标就是找到这个子序列然后用二分法找到值
  11. 找目标序列的时候也是用二分法,判断的依据是mid值比fin值大的话说明左边是升序,小的话,右边是升序,然后在利用升序序列的的
  12. 首尾值判断目标值是否在里边,在里边就用二分法找值,不在里边就改变fin或者sta值,继续循环找,注意二分法的时候while的判断
  13. 条件是sta<= fin,如果没有=的话,两个数的情况判断不出来。
  14. */
  15. public class Q33SearchRotatedArray {
  16. public static void main(String[] args) {
  17. int[] nums = new int[]{3,1};
  18. int target = 1;
  19. int res = search(nums,target);
  20. System.out.println(res);
  21.  
  22. }
  23. public static int search(int[] nums, int target) {
  24. int len = nums.length;
  25. //判断特殊情况
  26. if(len == 1 && nums[0] == target)
  27. {
  28. return 0;
  29. }
  30. int sta = 0,fin = len-1,mid,index = -1;
  31. //注意等号
  32. while(sta <= fin)
  33. {
  34. mid = (sta + fin)/2;
  35. if(nums[mid] < nums[fin])
  36. {
  37. if(target <= nums[fin] && target >= nums[mid])
  38. {
  39. index = binarySearch(nums,mid,fin,target);
  40. //找到值之后立即break
  41. break;
  42. }
  43.  
  44. else
  45. fin = mid -1;
  46. }
  47. else
  48. {
  49. if(target <= nums[mid] && target >= nums[sta])
  50. {
  51. index = binarySearch(nums,sta,mid,target);
  52. break;
  53. }
  54.  
  55. else
  56. sta = mid + 1;
  57. }
  58. }
  59. return index;
  60. }
  61. public static int binarySearch(int[] nums,int sta,int fin,int target)
  62. {
  63. int mid,index = -1;
  64. //注意等号
  65. while (sta <= fin)
  66. {
  67. mid = (sta + fin)/2;
  68. if(target == nums[mid])
  69. {
  70. index = mid;
  71. break;
  72. }
  73. else if (target < nums[mid])
  74. fin = mid-1;
  75. else
  76. sta = mid+1;
  77. }
  78. return index;
  79. }
  80. }

[leetcode33Search in Rotated Sorted Array]在排序旋转后序列中找目标值的更多相关文章

  1. LeetCode 33. Search in Rotated Sorted Array(在旋转有序序列中搜索)

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

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

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

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

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

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

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

  5. 28.earch in Rotated Sorted Array(排序旋转数组中查找)

    Level:   Medium 题目描述: Suppose an array sorted in ascending order is rotated at some pivot unknown to ...

  6. LeetCode 153. Find Minimum in Rotated Sorted Array (在旋转有序数组中找到最小值)

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  7. [LeetCode] 154. Find Minimum in Rotated Sorted Array II 寻找旋转有序数组的最小值 II

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

  8. 【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】

    [033-Search in Rotated Sorted Array(在旋转数组中搜索)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Suppose a sort ...

  9. [LeetCode] Find Minimum in Rotated Sorted Array II 寻找旋转有序数组的最小值之二

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

随机推荐

  1. Guava中EventBus分析

    EventBus 1. 什么是EventBus 总线(Bus)一般指计算机各种功能部件之间传送信息的公共通信干线,而EventBus则是事件源(publisher)向订阅方(subscriber)发送 ...

  2. 2014.04.28基于CPLD的LCOS场序彩色视频控制器设计

    基于CPLD的LCOS场序彩色视频控制器设计 作者:宋丹娜,代永平,刘艳艳,商广辉 发表刊物:液晶与显示,2009 学习时间:2014.04.28 文章讲述了-- (和上一篇论文有些相似之处) 1. ...

  3. 老猿学5G扫盲贴:中移动的5G计费架构中Nchf'服务化接口以及CHF中的AGF

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.关于Nchf' 在中移动企标中出现了在3GPP ...

  4. PyQt学习随笔:Qt事件QEvent.type类型常量及其含义资料汇总详细内容速查

    下表是Qt5.11提供的所有已经定义的事件类型常量及其含义说明(其中标蓝色的是老猿认为价值比较大的事件),事件的事件类型通过QEvent.type()来获取.由于老猿没有找到直接粘贴Excel表格的方 ...

  5. 性能测试基础——(MEN)

    关于内存在一块其实我并不是很想拿出来说,一般情况下内存这一块都是可优化的,可以通过硬件资源或者调整一些系统或者应用系统的参数配置来进行优化. 很多同僚问到了"内存泄漏"和" ...

  6. C#实例化对象的三种方式及性能对比

    前言 做项目过程中有个需求要实例化两万个对象并添加到List中,这个过程大概需要1min才能加载完(传参较多),于是开启了代码优化之旅,再此记录. 首先想到的是可能实例化比较耗时,于是开始对每种实例化 ...

  7. 题解-[HNOI2016]序列

    题解-[HNOI2016]序列 [HNOI2016]序列 给定 \(n\) 和 \(m\) 以及序列 \(a\{n\}\).有 \(m\) 次询问,每次给定区间 \([l,r]\in[1,n]\),求 ...

  8. 动态规划之经典数学期望和概率DP

    起因:在一场训练赛上.有这么一题没做出来. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6829 题目大意:有三个人,他们分别有\(X,Y,Z\)块钱 ...

  9. 一个最简单的typescript工程

    初级: 1.新建一个文件夹~/a/ 2.cd ~/a/ 3.npm init -y          生成package.json 4.新建index.ts,内容:console.log(" ...

  10. 参数文件恢复:RMAN-0617

    RMAN> restore spfile from autobackup; Starting restore at 03-APR-19using channel ORA_DISK_1using ...