Find Minimum in Rotated Sorted Array II

Follow up for "Find Minimum in Rotated Sorted Array": What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

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.

The array may contain duplicates.

解法一:暴力解法,直接使用algorithm库中的求最小元素函数

需要遍历整个vector

class Solution {
public:int findMin(vector<int> &num) {if(num.empty())return 0;vector<int>::iterator iter = min_element(num.begin(), num.end());return *iter;}
};

解法二:利用sorted这个信息。如果平移过,则会出现一个gap,也就是从最大元素到最小元素的跳转。如果没有跳转,则说明没有平移。

比上个解法可以省掉不少时间,平均情况下不用遍历vector了。

class Solution {
public:int findMin(vector<int> &num) {if(num.empty())return 0;else if(num.size() == 1)return num[0];else{for(vector<int>::size_type st = 1; st < num.size(); st ++){if(num[st-1] > num[st])return num[st];}return num[0];}}
};

解法三:二分查找

与Find Minimum in Rotated Sorted Array对照看,

一共有两处修改。

1、在无重复元素时,首尾元素相等代表指向同一个位置,因此程序直接返回即可。

然而当存在重复元素时,该条件并不能表示指向同一个位置,因此

nums[low] > nums[high]

改为

nums[low] >= nums[high]

2、在无重复元素时,中间元素与首元素相等,表示一共只有两个元素,low与high各指向一个。

由于while循环中限制的大小关系,因此返回nums[high]即为最小值。

然而当存在重复元素时,该条件并不能表示一共只有low和high指向的两个元素,

而是说明low指向的元素重复了,因此删除其一,low ++即可。

class Solution {
public:int findMin(vector<int>& nums) {if(nums.empty())return 0;if(nums.size() == 1)return nums[0];int n = nums.size();int low = 0;int high = n-1;while(low < high && nums[low] >= nums[high]){int mid = low + (high-low)/2;if(nums[mid] < nums[low])   // mid is in second parthigh = mid;else if(nums[mid] == nums[low])low ++;elselow = mid+1;}return nums[low];}
};

转载于:https://www.cnblogs.com/ganganloveu/p/4081483.html

【LeetCode】154. Find Minimum in Rotated Sorted Array II (3 solutions)相关推荐

  1. 154. Find Minimum in Rotated Sorted Array II

    文章目录 题目理解 二分+分治 只有二分 154是 153的升级版本. 题目理解 输入:一个按升序排序的数组nums,但是这个数组在某个位置被旋转了.(例如., 原始数组是[0,1,2,4,5,6,7 ...

  2. LeetCode Find Minimum in Rotated Sorted Array II

    Follow up for "Find Minimum in Rotated Sorted Array": What if duplicates are allowed? Woul ...

  3. 154 Find Minimum in Rotated Sorted Array 2

    这道题与 153 Find Minimum in Rotated Sorted Array 基本相同,只是有可能有重复的数字, 这样a[left] 就可能与a[mid]相同 因此就多一个可能,因此在最 ...

  4. LeetCode——Find Minimum in Rotated Sorted Array II

    Question Follow up for "Find Minimum in Rotated Sorted Array": What if duplicates are allo ...

  5. Find Minimum in Rotated Sorted Array II

    Description: Follow up for "Find Minimum in Rotated Sorted Array": What if duplicates are ...

  6. (LeetCode 153)Find Minimum in Rotated Sorted Array

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  7. LeetCode Find Minimum in Rotated Sorted Array

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  8. 【leetcode】Search in Rotated Sorted Array II(middle)☆

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  9. LeetCode Search in Rotated Sorted Array II

     Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would t ...

最新文章

  1. python下载大文件-使用python通过FTP下载大文件
  2. [BUUCTF-pwn]——bjdctf_2020_babyrop2
  3. ibatisnet 学习手记(1)
  4. 串口服务器应用领域及应用方案详解
  5. 一个基于Bmob的OPPO锁屏壁纸小程序,写过之后发现...好像没什么卵用...一脸懵逼
  6. 计算机视觉对扫描文件分类 OCR
  7. 计算机图形学学习报告,计算机图形学学习报告.doc
  8. 程序员进阶之路:四个程序员职业阶段,通常对应不同的薪资待遇!
  9. 用python一行代码实现1—100之和,你会吗
  10. 特征工程之自动特征生成(自动特征衍生)工具Featuretools介绍
  11. 趣味计算机课堂示范课,枯燥的理工学科,秒变趣味课堂
  12. 手动实现一维离散数据小波分解与重构
  13. Redis入门完整教程:CacheCloud是什么?
  14. 绘图板应用讲解计算机,计算机绘图应用教程——caxa电子图板xp.pptx
  15. 【历史上的今天】7 月 29 日:Win10 七周年;微软和雅虎的搜索协议;微软发行 NT 4.0
  16. 案例|山东省中医院基于ZABBIX构建网络设备监控预警平台
  17. 阴阳师辅助(基于按键精灵)
  18. 如何快速写出Json Schema,校验Json Schema
  19. 关于博客的论文php,基于php的个人博客系统毕业设计论文
  20. js/jQuery/vue练习

热门文章

  1. [4月21日]《51CTO 编辑部的外传》——剧本篇(上)
  2. [转]SQL Server 2005链接字符串
  3. windows下scrapy安装问题,以及Twisted安装报错(error: Microsoft Visual C++ 14.0 is required.)完美解决办法...
  4. 微信小程序wx.navigateTo路由循环嵌套问题解决
  5. volatile 的内存语义
  6. win10前面板耳机没声音
  7. 团队项目第一阶段冲刺站立会议08
  8. 玩转HTML5移动页面(转自http://tqtan.com/)
  9. 第六十一天 how can I 坚持
  10. layout-maxWidth属性用法