題目描述
分析
可以發現一個規律:
假如整個數組最后一個元素是x。
最小值左側(不含最小值自己)的元素全部大于x。
最小值右側(包含最小值自己,不包含x)的元素全部小于x。
如果整個數組是有序的,最小值就是第一個元素。最小值左側沒有元素,理解為有無窮大的值,上述規律也可以說是成立的。
class Solution {
public:int findMin(vector<int>& nums) {int left = 0;int n = nums.size();int right = n -1;int mid = 0;while(left < right){mid = (left+right)/2;if(nums[mid] > nums[n-1]){//nums[mid]大于最后一個元素,說明最小值在mid右側,不包含midleft = mid+1;}else{//nums[mid]小于等于最后一個元素,說明最小值在mid左側或者最小值就是mid這個元素,所以更新區間需要包含midright = mid;}}return nums[left];}
};
?