1. 这题虽然不是完全有序,但是部分有序,可以试试二分查找方法,并且使用的是数组这样的存储形式,根据下标随机访问,适合二分.
class Solution {
public:
int findMin(vector<int>& nums) {
//边界情况.
if(nums.size()==1) return nums[0];
int start=0, end=nums.size()-1;
while(start<=end) {
int mid = start + (end-start)/2;
//mid值大于end值,说明最小值在右边.
if(nums[mid]>nums[end]) start = mid+1;
else {
//如果mid为数组第1个值或前一个值大于mid值,说明就为第一个最小值,
//直接返回.
if(mid==0 || nums[mid-1]>nums[mid]) return nums[mid];
//否则最小值还在左边.
else end = mid-1;
}
}
//找不到return -1.
return -1;
}
};