153. Find Minimum in Rotated Sorted Array

问题:求被旋转了的排序数列中的最小值。

Example 1:
Input: [3,4,5,1,2] 
Output: 1

Example 2:
Input: [4,5,6,7,0,1,2]
Output: 0

  

方法:二分法查找

low=0,high=end index

mid=low和high的中间值

如果mid的数值>low的数值,则要求的最小值一定在mid~high之间(因为求最小值,不包含mid),那么下一次循环查找范围在mid~high之间,即让low=mid+1

反之如果mid<low的数值,则要求的最小值一定在low~mid之间(因为求最小值,包含mid),那么下一次循环查找范围在low~mid之间,即让high=mid

特:当low的值<high的值,那么low到high是顺序的,low为最小值,那么直接返回low。

 

参考代码:

 1 class Solution {
 2 public:
 3     int findMin(vector<int>& nums) {
 4         int low = 0, high = nums.size()-1;
 5         while(low<high){
 6             int mid = (low+high)/2;
 7             if(nums[low]<nums[high])
 8                 return nums[low];
 9             if(nums[mid]>=nums[low]){
10                 low=mid+1;
11             }else if(nums[mid]<=nums[high]){
12                 high=mid;
13             }
14         }
15         return nums[low];
16     }
17 };

 

posted @ 2020-03-21 13:11  habibah_chang  阅读(99)  评论(0编辑  收藏  举报