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. 将本地的新建的web Form页面放到服务器提示错误;

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs&q ...

  2. glusterFS的常用命令 (转)

    1.       启动/关闭/查看glusterd服务 # /etc/init.d/glusterd start # /etc/init.d/glusterd stop # /etc/init.d/g ...

  3. Oracle11安装

    图片上传失败,重新编辑 1.选择安装目录,一般设置数据库口令为system 2.环境检查 3.注册页面,直接下一步 4.点击安装按钮 5.进入安装界面 6.等待 7.直到出现下面界面,点击口令管理 8 ...

  4. Ubuntu 14 编译安装 PHP 5.4.45 + Nginx 1.4.7 + MySQL 5.6.26 笔记

    Ubuntu 14 编译安装 PHP 5.4.45 + Nginx  1.8.0/1.4.7 + MySQL 5.6.26 笔记,主要是给自己的PC机安装,非生产环境! 一.下载必要的源码 1.1.下 ...

  5. Ubuntu 12 升级 SVN 1.6 到 1.8 版本

    在 Ubuntu 12 中使用 PhpStorm 10.x,CheckOut项目后,Event Log 提示: Subversion command line client version is to ...

  6. plink远程连接服务器进行编译

    脚本命令: echo y|D:\remote_link\plink  -l  user  -pw password  172.16.0.101 "export LANG=en_US;cd / ...

  7. mysql python image

    连接mysql数据库: cnx = mysql.connector.connect(user='joe', database='test') Connector/Python参数列表 Argument ...

  8. DataTable、List使用groupby进行分组和分组统计;List、DataTable查询筛选方法

    DataTable分组统计: .用两层循环计算,前提条件是数据已经按分组的列排好序的. DataTable dt = new DataTable(); dt.Columns.AddRange(new ...

  9. Android 网络请求框架android-async-http问题

    今天通过接口请求服务器的一些app数据,发现一个很奇怪的问题,请求一个链接的时候,通常在第一次请求发起的时候没有什么问题,能很快的拿到数据,但是 往后再去请求的时候就会等待很久,而且最后会请求失败,一 ...

  10. 热更新脚本C#light,ulua,Scorpio性能比较

    http://www.unity蛮牛.com/thread-32861-1-1.html 测试环境: unity4.5.2  三个脚本全是源码导入  PC :处理器 Intel(R) Core(TM) ...