Suppose an array sorted in ascending order 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).

Find the minimum element.

You may assume no duplicate exists in the array.


题目标签:Array, Binary Search

  题目给了我们一个 旋转有序 数组,让我们找到最小值。如果是在还没有旋转的情况下,那么我们知道,最小值就是第一个数字。

  那么当遇到旋转的情况呢,我们就需要找到那个 “断点” 的两个数字,换句话说,就是最大值和最小值,而且这两个数字一定是相邻的。

  我们来看一下例子:

  0  1  2  4  5  6  7  直接返回第一个数字

  1  2  4  5  6  7  0  返回7 和0 中小的那个数字

  2  4  5  6  7  0  1  

  4  5  6  7  0  1  2

  5  6  7  0  1  2  4

  6  7  0  1  2  4  5

  7  0  1  2  4  5  6

  利用二分法来找到 最大和最小的 两个数字。

  rule 1: 如果 mid 小于 left, 意味着最大的数字在左边,继续去左边找,把right = mid, 这里要包括mid,因为mid 可能是最小的数字;

  rule 2: 如果 mid 大于 right, 意味着最小的数字在右边,继续去右边找,把left = mid, 这里要包括mid, 因为mid 可能是最大的数字。

  当left 和right 相邻的时候,返回小的数字就可以了。

 

Java Solution:

Runtime beats 53.07%

完成日期:08/30/2017

关键词:Array, Binary search

关键点:旋转中,min 和 max 必然是相邻的,利用二分法找到min 和max

 class Solution
{
public int findMin(int[] nums)
{
if(nums.length == 1)
return nums[0]; int left = 0;
int right = nums.length - 1; if(nums[left] < nums[right])
return nums[0]; while(left + 1 != right)
{
int mid = left + (right - left) / 2; if(nums[mid] < nums[left]) // if left is greater than mid, move to left
right = mid;
else if(nums[mid] > nums[right]) // if mid one is greater than right, move to right
left = mid;
} // if there are only two number
return Math.min(nums[left], nums[right]);
}
}

参考资料:N/A

LeetCode 算法题目列表 - LeetCode Algorithms Questions List

最新文章

  1. nginx配置文件结构
  2. 微信智慧KTV上线 不怕周末订不到包厢了
  3. php获取在线xml的数据
  4. excel表里的数据导入到数据库里
  5. WinMain初始化详细过程以及消息循环
  6. 动态加载dll,并创建类对象放入到list中。
  7. Struts2 教程
  8. cocos2d-x 2.2 开发手记2
  9. iOS OC开发代码规范
  10. 安卓MP3播放器开发实例(1)之音乐列表界面
  11. 数据同步DataX
  12. spring3.1........jar包下载
  13. 2018 ICPC 焦作网络赛 E.Jiu Yuan Wants to Eat
  14. 利用 JMetal 实现大规模聚类问题的研究(一)JMetal配置
  15. ansible-role写法
  16. mysql-ubuntu卸载安装mysql
  17. Python中read()、readline()和readlines()三者间的区别和用法
  18. Keras 2.0版本运行
  19. 扩展music-list.vue让列表前三名显示&#127942;奖杯
  20. 奇怪的问题:改变了界面,生成的exe不起作用

热门文章

  1. 多个版本的Python如何设置不冲突
  2. Eclipse Oxygen 解决 自动导包的问题
  3. 初学node.js有感二
  4. 【转】Spark运行过程
  5. #翻译#原文来自Database.System.Concepts(6th.Edition.2010)2.6Relational Operations,原文作者Abraham Silberschaz , Henry F. Korth , S. Sudarshan
  6. 你真的会阅读Java的异常信息吗?
  7. 【POJ】 1061 青蛙的约会(扩欧)
  8. The area 积分积分
  9. S2_OOP第二章
  10. Python 实现的随机森林