Find Minimum in Rotated Sorted Array II (leetcode)
来源:互联网 发布:考级电子琴品牌 知乎 编辑:程序博客网 时间:2024/06/16 06:37
题目:
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.
题目来源:https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/
解题思路:如果中间值和两端值不相等,则直接利用上题的思路解即可,如果相等,则需要递归求解,分别求出左半部分和有半部分的最小值,然后返回两者的最小值,在findMin1中即是用的这种思路,在这里代码用了vector的构造函数完成拷贝,其实可以重新写一个计算,可以把拷贝时间节省下来。FindMin函数中当有相等值时,就把左右元素都去掉,重新找最小值,但是这个如果数组中元素全部相同,则退化到了O(n)复杂度。#include<iostream>#include<vector>using namespace std;int findMin(vector<int> &num){if(num.empty())return 0;int mid=0,first=0,last=num.size()-1;while(first!=last && first+1!=last){mid=first+((last-first)>>1);if(num[first]==num[mid] && num[last]==num[mid]){first++;last--;continue;}if(num[first]>num[mid])last=mid;else if(num[mid]>num[last])first=mid;elsereturn num[first];}if(first==last)return num[first];elsereturn min(num[first+1],num[first]);}int findMin1(vector<int> &num){if(num.empty())return 0;int mid=0,first=0,last=num.size()-1;while(first!=last && first+1!=last){mid=first+((last-first)>>1);if(num[first]==num[mid] && num[last]==num[mid]){vector<int>left(num.begin()+first,num.begin()+mid); vector<int>right(num.begin()+mid+1,num.begin()+last+1); return min(findMin(left),findMin(right));}if(num[first]>num[mid])last=mid;else if(num[mid]>num[last])first=mid;elsereturn num[first];}if(first==last)return num[first];elsereturn min(num[first+1],num[first]);}int main() { const int N=3;int A[N]={3,1,1};vector<int> num(A,A+N);int result=findMin(num); system("pause"); return 0; }
0 0
- LeetCode Find Minimum in Rotated Sorted Array & LeetCode Find Minimum in Rotated Sorted Array II
- leetCode -Array 154. Find Minimum in Rotated Sorted Array II
- [Leetcode]Find Minimum in Rotated Sorted Array I & II
- LeetCode 154 Find Minimum in Rotated Sorted Array II
- [LeetCode] Find Minimum in Rotated Sorted Array II
- LeetCode: Find Minimum in Rotated Sorted Array II
- 【Leetcode】Find Minimum in Rotated Sorted Array II
- Find Minimum in Rotated Sorted Array II -- LeetCode
- Leetcode: Find Minimum in Rotated Sorted Array II
- LeetCode之Find Minimum in Rotated Sorted Array II
- leetcode Find Minimum in Rotated Sorted Array II
- leetcode - Find Minimum in Rotated Sorted Array II
- leetcode:Find Minimum in Rotated Sorted Array II
- [leetcode] Find Minimum in Rotated Sorted Array II
- [Leetcode]Find Minimum in Rotated Sorted Array I & II
- Find Minimum in Rotated Sorted Array II c++ leetcode
- leetcode:Find Minimum in Rotated Sorted Array II
- 【LeetCode】【Solution】Find Minimum in Rotated Sorted Array I & II
- apache2.4 + php5.5 安装配置简约步骤
- JDBC连接各种数据库的字符串
- How tomcat works 读书笔记十二 StandardContext 上
- MessageFormat/String.format用法
- iOS 静态库支持 iOS5 和 Arm64
- Find Minimum in Rotated Sorted Array II (leetcode)
- ecms二次开发之修改页面的生成参数
- Hibernate4实战 之第七部分:最佳实践
- git push rejected的原因
- 简单导航下拉菜单
- Microsoft Dom xml写入与读取操作笔记
- mysql select查询的5个子句
- C 知识点
- knitr包 R语言