154.Find Minimum in Rotated Sorted Array II
2015-07-03 15:28
204 查看
思路:循环排序,二分法。注意存在相等值的情况。
class Solution {
public:
int findMin(vector<int>& nums) {
int len=nums.size();
//判错
if(len<0) return -1;
if(len==1) return nums[0];
int left=0,right=len-1;
while(left<right){
int mid=(left+right)/2;
if(nums[left]<nums[right]){//1.左边<右边的情况
return nums[left];
}else if(nums[left]>nums[right]){//2.左边>右边情况
if(nums[mid]>=nums[left]){
left=mid+1;
}else{
right=mid;
}
}else{//3.左边=右边的情况
if(nums[mid]>nums[left]){//如果中间的大于左边的,在右半部分
left=mid+1;
}else if(nums[mid]<nums[left]){//如果中间的小于左边的,在左半部分
right=mid;
}else{//如果左边和中间和右边的值都相同,只能一个一个得遍历
int cur=left;
while(cur<right){
cur++;
if(nums[cur]<nums[left]){//找到第一个小的值,就是最小值
return nums[cur];
}else if(nums[cur]>nums[left]){//找到第一个大的值,最小值肯定在右边
left=cur+1;
break;
}
}
return nums[left];//如果全部值都相等,就随便返回一个
}
}
}
return nums[left];
}
};
class Solution {
public:
int findMin(vector<int>& nums) {
int len=nums.size();
//判错
if(len<0) return -1;
if(len==1) return nums[0];
int left=0,right=len-1;
while(left<right){
int mid=(left+right)/2;
if(nums[left]<nums[right]){//1.左边<右边的情况
return nums[left];
}else if(nums[left]>nums[right]){//2.左边>右边情况
if(nums[mid]>=nums[left]){
left=mid+1;
}else{
right=mid;
}
}else{//3.左边=右边的情况
if(nums[mid]>nums[left]){//如果中间的大于左边的,在右半部分
left=mid+1;
}else if(nums[mid]<nums[left]){//如果中间的小于左边的,在左半部分
right=mid;
}else{//如果左边和中间和右边的值都相同,只能一个一个得遍历
int cur=left;
while(cur<right){
cur++;
if(nums[cur]<nums[left]){//找到第一个小的值,就是最小值
return nums[cur];
}else if(nums[cur]>nums[left]){//找到第一个大的值,最小值肯定在右边
left=cur+1;
break;
}
}
return nums[left];//如果全部值都相等,就随便返回一个
}
}
}
return nums[left];
}
};
相关文章推荐
- 洛杉矶VS深圳:美中创业城市的异同
- 第一篇 记录
- ExtJs 入门教程二十一[单选框 :Radio]
- Xcode用Archive生成ipa失败,只生成Generic Xcode Archive的解决方案
- iOS 9 适配系列教程
- fread 和 fwrite用法小结
- 【Java基础】Java与Windows系统的交互
- Android开发新手第一要素
- Js之继承
- 他好像一条狗
- preference activity框架
- GRE写作必备句型
- 给树莓派2的vim安装powerline时遇到的一些小问题和解决方法
- Properties类的使用
- Ubuntu14.10+cuda7.0+caffe配置
- Python字符串的encode与decode研究心得乱码问题解决方法
- 风绪
- mysql error:Lock wait timeout exceeded; try restarting transaction
- Weka开发[2]-分类器类
- Android MediaScannerService源码分析