[LeetCode] 154. Find Minimum in Rotated Sorted Array II
来源:互联网 发布:数控编程方法 编辑:程序博客网 时间:2024/06/06 17:42
154. Find Minimum in Rotated Sorted Array II (在旋转过的有序数组中找最小值II)
- Find Minimum in Rotated Sorted Array II 在旋转过的有序数组中找最小值II
- 题目翻译
- 解题方法
- 代码
1. 题目翻译
假设一个数组最初按升序排列,然后将这个数组在某个点后所有元素移到最前面,找到这个数组的最小元素。
例子:
原数组:0 1 2 4 5 6 7旋转后:4 5 6 7 0 1 2
2. 解题方法
有两种方法,一种时间复杂度为O(n),另一种使用二分查找,时间复杂度为O(lgn)。
最简单的方法,顺序遍历一遍数组找到最小值,时间复杂度为O(n)。
二分查找
与这题的上一个版本 153. Find Minimum in Rotated Sorted Array 不同的是,这一题中存在相同的数字,所以需要特殊考虑。
当middle指向的值大于最右元素时,说明最小值在middle与right之间且并不可能是middle自身,所以将left设为middle+1。
当middle指向的值小于等于最右元素时,说明middle到right之间的值一定大于middle,即最小值在middle左面或为middle本身。所以将right设为middle而不是middle-1,这样最后right一定为最小值。
特殊情况:考虑一种情况,当left,middle,right三者指向的值相同时。例如,1 1 1 0 1,三者指向的为不同的1,按上面所说的解法,此时应该将right设为middle所在的下标为[2]的数字1。但是很显然,最小值并不在middle左边或middle本身,而是在middle右边,因为具有相同数字时,我们无法判断它是属于左右哪一个分组的。所以在这种情况下,要将1,2两种方法结合,对left和right之间的元素顺序遍历。
3. 代码
//Runtime: 6msclass Solution {public: int findMin(vector<int>& nums) { int left = 0, right = nums.size()-1; int middle = 0; while(left<right){ middle = left + (right-left)/2; if(nums[left]==nums[right]&&nums[middle]==nums[right]){ int result = nums[left]; for (int i = left+1;i<=right;i++){ if(result>nums[i]) result = nums[i]; } return result; } if(nums[middle]>nums[right]) left = middle+1; else right = middle; } return nums[right]; }};
阅读全文
0 0
- leetCode -Array 154. Find Minimum in Rotated Sorted Array II
- [LeetCode]154.Find Minimum in Rotated Sorted Array II
- LeetCode 154. Find Minimum in Rotated Sorted Array II
- [leetcode] 154.Find Minimum in Rotated Sorted Array II
- [LeetCode]154. Find Minimum in Rotated Sorted Array II
- 【leetcode】154. Find Minimum in Rotated Sorted Array II
- leetcode.154. Find Minimum in Rotated Sorted Array II
- [leetcode] 154. Find Minimum in Rotated Sorted Array II
- leetcode:154. Find Minimum in Rotated Sorted Array II
- [LeetCode] 154. Find Minimum in Rotated Sorted Array II
- LeetCode 154. Find Minimum in Rotated Sorted Array II
- LeetCode 154. Find Minimum in Rotated Sorted Array II
- LeetCode 154. Find Minimum in Rotated Sorted Array II (Hard)
- LeetCode:154. Find Minimum in Rotated Sorted Array II
- leetcode 154. Find Minimum in Rotated Sorted Array II
- LeetCode 154. Find Minimum in Rotated Sorted Array II
- 【LeetCode】154. Find Minimum in Rotated Sorted Array II
- [leetcode]154. Find Minimum in Rotated Sorted Array II
- [BZOJ1559]-[JSOI2009]密码-补全AC自动机+状压dp
- js基础
- IO流(9)--字符流的三种拷贝
- 再谈Linux内核中的RCU机制
- Java Web 知识总结
- [LeetCode] 154. Find Minimum in Rotated Sorted Array II
- Keras with R (MLP)
- ###Springmvc封装复杂表单数据:表单提交多个实体类的参数【对象类型参数,自动封装】name属性值不能重复。和实体类属性名一致
- 个人学习笔记02-DoTween插件简单运用
- Android项目中加入弹幕功能
- 有缘与你第一次相见!
- java中的一些名词或者术语(不断补充中……)
- 分类算法之朴素贝叶斯分类(Naive Bayesian classification)
- C语言基础