Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., [0,1,2,4,5,6,7]
might become [4,5,6,7,0,1,2]
).
Find the minimum element.
You may assume no duplicate exists in the array.
Example 1:
Input: [3,4,5,1,2] Output: 1
Example 2:
Input: [4,5,6,7,0,1,2] Output: 0
使用二分搜索法:找最小值(无重复数字)
nums[nums.size-1] > nums[0] ,则单调递增,如左图,返回nums[0]
nums[mid] < nums[0] 则在最小值在[ 0, mid] ,否则最小值在 (mid, nums.size-1] (如右图)
class Solution {
public:
int findMin(vector<int>& nums) {
int l = 0 , r = nums.size()-1;
if(nums[r] >= nums[l])
return nums[0];
while(l < r)
{
int mid = l + r >> 1;
if(nums[0] > nums[mid]) r = mid;
else
l = mid + 1;
}
return nums[r];
}
};