【leetcode】Find Minimum in Rotated Sorted Array I & II (middle)
1. 无重复
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).
Find the minimum element.
You may assume no duplicate exists in the array.
思路:这个是找最小,和找指定数字其实差不多的。画个示意图吧

二分查找,关键是扔掉不包含最小值的那一半。
1.如果右半部分满足 n[m] < n[r] 则右半部分是递增的, 让 r = m 因为m位置有可能是最小的,把递增的那半扔掉。
2.否则,左边是递增的,直接让 l = m + 1 因为m处比原本的 l 大,不可能是最小值。
如果这个序列是顺序的,会归为情况1. 如果右半部分不是递增的则 大|小 的部分一定在右边,最小值不会在左边区域。
最后l = r 时 就是最小值位置。
优化版代码:
int findMin(vector<int> &num) {
int lo =, hi = num.size()-;
while(lo<hi){
int mid = lo + (hi - lo) / ;
if(num[mid]>num[hi]) lo=mid+;
else hi=mid;
}
return num[lo];
}
我的原版代码:
int findMin(vector<int> &num) {
int l = , r = num.size() - ;
while(l <= r)
{
if(l == r) return num[l];
int m = (l + r) / ;
if(num[r] > num[m]) //右边是上升区
{
r = m;
}
else
{
l = m + ;
}
}
}
2. 有重复
原本的有序数列是这样的,我们只展现一段相同数字,多段相同数字是同理的。

1. 如果n[m] < n[r] , 那么右半部分是递增的,处理跟无重复数字一样 r = m;
2. 如果n[m] > n[r] , 说明 大|小 的衔接处在右边,扔掉左边 l = m + 1;
3. 如果n[m] == n[r] 有几种可能

这时,我们跳过复杂的判断,直接让 r-- 再进行下一次判断。 如果所有数字都一样的话,最坏的计算复杂度为O(n)
int findMinDuplicates(vector<int> &num) {
int l = , r = num.size() - ;
while(l < r)
{
int m = l + (r - l) / ;
if(num[r] > num[m]) //右边是上升区
{
r = m;
}
else if(num[r] == num[m])
{
r--;
}
else
{
l = m + ;
}
}
return num[l];
}
【leetcode】Find Minimum in Rotated Sorted Array I & II (middle)的更多相关文章
- 【leetcode】Find Minimum in Rotated Sorted Array I&&II
题目概述: Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 ...
- 【leetcode】Find Minimum in Rotated Sorted Array II JAVA实现
一.题目描述 Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed ...
- 【LeetCode】Find Minimum in Rotated Sorted Array 在旋转数组中找最小数
Add Date 2014-10-15 Find Minimum in Rotated Sorted Array Suppose a sorted array is rotated at some p ...
- 【LeetCode】Find Minimum in Rotated Sorted Array 解题报告
今天看到LeetCode OJ题目下方多了"Show Tags"功能.我觉着挺好,方便刚開始学习的人分类练习.同一时候也是解题时的思路提示. [题目] Suppose a sort ...
- 【LeetCode】Find Minimum in Rotated Sorted Array 找到旋转后有序数组中的最小值
本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4032570.html 原题: Suppose a sorted array is ...
- 【LeetCode】33. Search in Rotated Sorted Array 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 【LeetCode】977. Squares of a Sorted Array 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序 日期 题目地址:https://leetcod ...
- 【LeetCode】153. Find Minimum in Rotated Sorted Array 解题报告(Python)
[LeetCode]153. Find Minimum in Rotated Sorted Array 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode. ...
- 【LeetCode】81. Search in Rotated Sorted Array II (2 solutions)
Search in Rotated Sorted Array II Follow up for "Search in Rotated Sorted Array":What if d ...
随机推荐
- 2015年12月13日 spring初级知识讲解(四)面向切面的Spring
2015年12月13日 具体内容待补充...
- Fedora 25 Alpha版本今天发布啦
时隔Fedora 24发布后的3个月,Fedora项目团队非常开心的宣布任何感兴趣的用户都能下载和测试即将到来的Fedora 25操作系统的Alpha预发布版本,在Fedora 25 Alpha里程碑 ...
- 简述JavaScript的运行机制
想要理解JavaScript的运行机制,需要分别深刻理解以下几个点: · JavaScript的单线程机制 · 任务队列(同步任务和异步任务) · 事件和回调函数 · 定时器 · Event Loop ...
- python os.path模块常用方法详解:转:http://wangwei007.blog.51cto.com/68019/1104940
1.os.path.abspath(path) 返回path规范化的绝对路径. >>> os.path.abspath('test.csv') 'C:\\Python25\\test ...
- H5canvas赛车游戏-基于lufylegend引擎
lufylegend引擎是canvas游戏中,比较简单的引擎之一,它不需要配置环境,类似引入jquery包的方式,引用对应js文件即可 lufylegend官方网站:http://www.lufyle ...
- OS X 添加环境变量
这个方法相对靠谱,可用: 1, cd 到home 2, touch .bash_profile 3,open -e .bash_profile 把各个路径按如下填写: export PATH=${PA ...
- mysql根据汉字拼音排序查询
例如现在有一张数据表label,字段为id.name,此表的字符集设置为gb2312,以gb2312_chinese_ci整理. 设置InnoDB引擎的字符集也为简体中文,且整理为gb2312_chi ...
- JavaWeb出现404一个很隐蔽的原因
- 5.2---小数的二进制表示(CC150)
public static String printBin(double num) { StringBuffer str = new StringBuffer(); str.append('0'); ...
- 1.5---字符串压缩(CC150)
import java.util.*; public class Zipper { public String zipString(String str) { // write code here i ...