把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个升序的数组的一个旋转,输出旋转数组的最小元素。
例如数组 {3,4,5,1,2}{3,4,5,1,2} 为 {1,2,3,4,5}{1,2,3,4,5} 的一个旋转,该数组的最小值为 11。
数组可能包含重复项。
注意:数组内所含元素非负,若数组大小为 00,请返回 −1−1。
数据范围
数组长度 [0,90][0,90]。
样例
输入:nums = [2, 2, 2, 0, 1]
输出:0
class Solution {
public:
int findMin(vector<int>& nums) {
if(nums.empty())
return -1;
if(nums[0]<nums[nums.size()-1])
return nums[0];
int n=nums.size()-1;
while(nums[0]==nums[n])n--;//去掉重复元素,找到第一个小于nums[0]的元素为最小值
int l=0,r=n;
while(l<r)
{
int mid=l+r>>1;
if(nums[0]>nums[mid]) r=mid;
else
l=mid+1;
}
return nums[l];
}
};