1. class Solution {
  2. public:
  3. int minNumberInRotateArray(vector<int> rotateArray) {
  4. //常规的遍历方法时间是O(N)的,需要使用二分法,这样对于不重复的数组,就能实现O(logN)的时间
  5. int l=0,r=rotateArray.size()-1;
  6. if(r<0)return NULL;//空数组
  7. int m=0;
  8. while(l<r){//当左指针小于右指针的时候,继续二分法
  9. //下面分两种情况讨论:①数组仍然具有旋转数组特性,②已经不是旋转数组了,变回递增数组,直接返回l
  10. if(rotateArray[l]>=rotateArray[r]){//等号是为了考虑数组存在重复的情况
  11. m=(l+r)>>1;
  12. if(rotateArray[m]<rotateArray[r])//中间值小于右边,则中间值属于属于右边数组
  13. //那么最小值是在 [l,m]之间
  14. r=m;
  15. else
  16. if(rotateArray[m]>rotateArray[r])//中间值大于右边,中间值属于左边数组
  17. //最小值在(m,r]之间
  18. l=m+1;
  19. else//如果中间值等于右边,无法判断,让l++ 或者让r--
  20. l++;
  21. }
  22. else// 当l 小于r 的时候,l一定是最小值
  23. break;
  24. }
  25. return rotateArray[l];
  26. }
  27. };

剑指offer 旋转数组的更多相关文章

  1. 剑指Offer 旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...

  2. 剑指Offer——旋转数组的最小数字

    题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一 ...

  3. 用js刷剑指offer(旋转数组的最小数字)

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个 ...

  4. 剑指Offer:数组中出现次数超过一半的数字【39】

    剑指Offer:数组中出现次数超过一半的数字[39] 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于这 ...

  5. 《剑指offer》数组中只出现一次的数字

    本题来自<剑指offer> 数组中只出现一次的数字 题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 思路一:在<剑指of ...

  6. 剑指 Offer 51. 数组中的逆序对 + 归并排序 + 树状数组

    剑指 Offer 51. 数组中的逆序对 Offer_51 题目描述 方法一:暴力法(双层循环,超时) package com.walegarrett.offer; /** * @Author Wal ...

  7. 剑指 Offer 39. 数组中出现次数超过一半的数字 + 摩尔投票法

    剑指 Offer 39. 数组中出现次数超过一半的数字 Offer_39 题目描述 方法一:使用map存储数字出现的次数 public class Offer_39 { public int majo ...

  8. 剑指 Offer 03. 数组中重复的数字

    剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知 ...

  9. 菜鸟刷题路:剑指 Offer 03. 数组中重复的数字

    剑指 Offer 03. 数组中重复的数字 哈希表/set class Solution { public int findRepeatNumber(int[] nums) { HashSet< ...

随机推荐

  1. C#之委托(函数参数传递)【转】

    原文:http://blog.csdn.net/wangdan199112/article/details/18796527 在学委托这块儿的时候,函数参数这块不是很理解,于是针对一个例子做了深入的理 ...

  2. 通过HttpModule管道,帮助api对接开发

    我们公司的技术以.net为主,最近公司的项目需要和其它以java为主的公司搞对接.   .net提供webapi由java请求调用. 目前出现java说调用了,但是.net一直接收不到数据.两方开发人 ...

  3. Java 实现大整数加减乘除

    自己用Java实现的大整数加减乘除运算.还有可以改进的地方,有兴趣的童鞋可以加以改进.仅供参考,请勿转载! package barrytest; import java.util.ArrayList; ...

  4. 关于Webapp的注意事项

    meta标签 <meta name="viewport" content="width=device-width, initial-scale=1.0, user- ...

  5. 在magento里把查询语句转换称sql语句

    在magento里把查询语句转换称sql语句 $order->getSelectsql(true); order为对象.

  6. HDU 1562 Guess the number

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1562 Problem Description Happy new year to everybody ...

  7. Sass与Compress实战:第四章

    概要:这一章将深挖Compass的工具箱,看看Compass的混合器如何帮助你省去编写重复样式表的辛苦工作. 本章内容: ● 使用Compass重置浏览器默认样式表 ● 改进样式表排版的Compass ...

  8. mysql 取出的日期数据缺少时分秒

    项目使用的数据库是mysql  持久层框架是hibernate  利用SQLQuery 获取日期的时候缺少时分秒   将 .addScalar("dealTS",StandardB ...

  9. Java 1.0 类与对象

    1.Java中main()的作用: a.测试真正的类 b.启动Java应用程序 2. Java程序只会让对象与对象交互 3.创建对象时存储在堆中,自动回收. 4.Java无全局变量 5.Java程序由 ...

  10. ConcurrentHashMap完全解析(jdk6/7,8)

    并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap ...