您的位置:首页 > 编程语言 > C语言/C++

【LeetCode-154】Find Minimum in Rotated Sorted Array II(C++)

2016-12-21 10:44 495 查看
题目要求:找出已排序的旋转数组中的最小值,数组中可能存在重复的数。

问题解答:这道题剑指offer上面有讲,用二分查找算法来做,如果index1,index2,mid指向的值相等,则不能判断mid指向的值是属于前面的递增部分还是后面的递增部分。因此需要用顺序查找来做,所以如果数组中有重复元素,则时间复杂度会由O(logn)变为O(n)。

class Solution {
public:
int findMin(vector<int>& nums) {
int l=nums.size();
int index1=0;
int index2=l-1;
int mid=index1;
while(nums[index1]>=nums[index2]){
if(index2-index1==1){
mid=index2;
break;
}
mid=index1+((index2-index1)>>1);
if(nums[mid]==nums[index1]&&nums[index1]==nums[index2])
return MinInOrder(nums);
if(nums[mid]>=nums[index1])
index1=mid;
else if(nums[mid]<=nums[index2])
index2=mid;
}
return nums[mid];
}
private:
int MinInOrder(vector<int>& nums){
int l=nums.size();
int result=nums[0];
for(int i=1;i<l;i++){
result=result>nums[i]?nums[i]:result;
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 数组