旋转数组的最小数字

题目描述

  把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。

  输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

  NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。


实现代码

function minNumberInRotateArray(rotateArray)
{
var len = rotateArray.length
if (len == 0){
return 0
}else{
var low = 0;
var high = len-1;
while(low<high){
var mid = low + Math.floor((high - low) / 2);
if(rotateArray[mid] > rotateArray[high]){
low = mid + 1;
}else if(rotateArray[mid] == rotateArray[high]){
high = high - 1;
}else{
high = mid;
}
}
return rotateArray[low];
}
}

思路

  旋转之后的数组实际上可以划分成两个有序的子数组:前面子数组的大小都大于后面子数组中的元素,实际上最小的元素就是两个子数组的分界线。

  1. 我们用两个指针low和high分别指向数组的第一个元素和最后一个元素。按照题目的旋转的规则,第一个元素应该是大于等于最后一个元素的;但是如果不是旋转,第一个元素肯定小于或等于最后一个元素。

  2. 找到数组的中间元素。中间元素大于最后一个元素,则中间元素位于前面的递增子数组,此时最小元素位于中间元素的后面。我们可以让第一个指针low指向中间元素。

  3. 中间元素小于最后一个元素,则中间元素位于后面的递增子数组,此时最小元素位于中间元素的前面。我们可以让第二个指针high指向中间元素。

  4. 中间元素等于最后一个元素,则将第二个指针向前移,然后继续比较。

最新文章

  1. Android知识——ViewHolder的作用与用法
  2. JS+CSS3实现带预览图幻灯片效果
  3. ThinkPHP数据库访问CRUD;__SELF__和__ACTION__的区别;自动收集表单:$n-&gt;create();
  4. ElasticSearch学习-centos下安装
  5. C# WebClient 使用http免费代理。
  6. JS无缝滚动
  7. Python--类定义
  8. NPlot开源画图类
  9. Java 编程 订单、支付、退款、发货、退货等编号主动生成类
  10. 详细解读-this-关键字在全局、函数、对象、jQuery等中的基础用法!
  11. 大数据Hadoop学习之搭建hadoop平台(2.2)
  12. [R] [Johns Hopkins] R Programming -- week 4
  13. 菜鸟教程之学习Shell script笔记(下)
  14. CONTINUE...?模拟分情况
  15. recovery 升级过程LED灯闪烁
  16. html与表格(table)相关的属性
  17. Ubuntu 12.04 LTS(64 bit) + RTL8188CU无线网卡驱动
  18. AR2220 通过cpu-defend policy处理大量大量arp广播的小技巧
  19. history统计命令最多的20条
  20. TF54000: 由于服务器时钟设置可能不正确,无法更新数据解决方案(补充)

热门文章

  1. PLSQL变量和类型,流程控制语句,集合
  2. java之接口开发-初级篇-socket通信
  3. 关于jsonp跨域的 实现
  4. Right-BICEP测试四则运算2
  5. POJ 2484(对称博弈)
  6. sql主表分页查询关联子表取任意一条高效方案
  7. ansible介绍和安装
  8. 【Leetcode】322. Coin Change
  9. 【Leetcode】771. Jewels and Stones
  10. CKeditor、CKFinder的安装配置