【LeetCode 154】
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.
//旋转数组中找最小值
//利用折半查找
#include <iostream>
#include <vector>
using namespace std;
int findMin(vector<int>& nums) {
if (nums.size() == 0)return 0;
//折半查找的准备
int left = 0, right = nums.size() - 1, res = nums[0];
while (left<right - 1){
//取中点
int mid = left + (right - left) / 2;
//左侧有序(从最左侧取最小值)
if (nums[left]<nums[mid]){
res = min(res, nums[left]);
left = mid + 1;
}
//右侧有序,左侧乱序
else if (nums[left]>nums[mid]){
res = min(res, nums[right]);
right = mid;
}
else ++left;
}
res = min(res, nums[left]);
res = min(res, nums[right]);
return res;
}
//测试函数
int main(){
vector<int> s{4,5,6,7,0,1,2,3};
cout << findMin(s) << endl;
return 0;
}