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)的更多相关文章

  1. 【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 ...

  2. 【leetcode】Find Minimum in Rotated Sorted Array II JAVA实现

    一.题目描述 Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed ...

  3. 【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 ...

  4. 【LeetCode】Find Minimum in Rotated Sorted Array 解题报告

    今天看到LeetCode OJ题目下方多了"Show Tags"功能.我觉着挺好,方便刚開始学习的人分类练习.同一时候也是解题时的思路提示. [题目] Suppose a sort ...

  5. 【LeetCode】Find Minimum in Rotated Sorted Array 找到旋转后有序数组中的最小值

     本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4032570.html 原题: Suppose a sorted array is ...

  6. 【LeetCode】33. Search in Rotated Sorted Array 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  7. 【LeetCode】977. Squares of a Sorted Array 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序 日期 题目地址:https://leetcod ...

  8. 【LeetCode】153. Find Minimum in Rotated Sorted Array 解题报告(Python)

    [LeetCode]153. Find Minimum in Rotated Sorted Array 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode. ...

  9. 【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 ...

随机推荐

  1. ASP.NET MVC 4 的JS/CSS打包压缩功能-------过滤文件

    今天在使用MVC4打包压缩功能@Scripts.Render("~/bundles/jquery") 的时候产生了一些疑惑,问什么在App_Start文件夹下BundleConfi ...

  2. [译]git reset

    git reset 如果说git revert是一个安全的撤销方式, 那么git reset就是一个非常危险的方法了. 当你使用git reset撤销的时候, 你没有可能在回到最初了-他是一个永久的不 ...

  3. button事件驱动

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. js读取修改创建txt文本类型文件(.ini)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. C语言的源程序字符集与执行字符集

    我们程序文件的字符集就是我们写出来的.c扩展名的文件的字符集,这里用的是系统默认的 ANSI 字符集,如下图: 上面的字符集我们不关心,我们关心的是 源程序的字符集 和程序的 执行字符集 ,源程序的字 ...

  6. 语义化HTML

    一.怎样语义化html结构 语义化是指用合理HTML标签以及其特有的属性去格式化文档内容. 正确语义化----结构(html)才是重点,样式(css)是用来修饰结构的.所以要先确定html,确定标签, ...

  7. class training

    实验3-1 分别使用while循环.do while循环.for循环求 (即求1+2+3+ --+100). 参考: 源码 方法一#include<stdio.h> int main(){ ...

  8. 跟着百度学PHP[4]OOP面对对象编程-17-多态

    多态是除封装和继承之外的另一个面象对象的三大特性之一. 多态的作用简而言之就是为程序做括展. 比如说在公司上班,每个月财务发放工资,同一个发工资的方法,在公司内不同的员工或是不同职位的员工,都是通过这 ...

  9. 单链表的类的c++实现

    #include<iostream> using namespace std;template <class T>struct linkNode{ T data; linkNo ...

  10. windows下C语言编程获取磁盘(分区)使用情况

    windows下编程获取磁盘(分区)使用情况 windows下编程获取磁盘(分区)使用情况 GetLogicalDriveStrings函数 使用示例 获取需要的缓冲区长度示例 获取所有驱动器号示例 ...