算法1
思路:二分
C++ 代码
class Solution {
public:
int findMin(vector<int>& nums) {
int n=nums.size()-1;//先求数组长度
if(n<0)return -1;//数组长度小于0,返回-1
while(n>0 &&nums[n]==nums[0])n--;//如果数组长度大于0,并且数组前后数字相同,n--
if(nums[n]>=nums[0]) return nums[0];//如果数组持一条平的,那么最小值就是第一个,最小值是nums[0]
//如果全部是递增趋势的,翻转后之前数组最大的就变成了最小的了,采取的方法是二分
int l=0,r=n;
while(l<r)
{
int mid=l+r>>1;
if(nums[mid]<nums[0])r=mid;//wow,这里第一遍把nums[mid]写成mid,导致出错
else l=mid+1;
}
return nums[r];
}
};