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;
}
};