题目:153. 寻找旋转排序数组中的最小值
思路:二分法,用中间的元素和右边的元素进行比较。
如果中间元素小,说明[mid,r]肯定是单调递增的,那最小的元素就在[l,mid]之间诞生。
如果中间元素大,说明[l,mid]肯定是单调递增的,那最小的元素就在[mid,r]之间诞生。
C++版本:
class Solution {
public:
int findMin(vector<int>& nums) {
int l=0,r=nums.size()-1;
while(l<r){
int mid=(l+r)/2;
if(nums[mid]>nums[r]){
l=mid+1;
}else{
r=mid;
}
}
return nums[l];
}
};
JAVA版本:
class Solution {
public int findMin(int[] nums) {
int l=0,r=nums.length-1;
while(l<r){
int mid=(l+r)/2;
if(nums[mid]>nums[r]){
l=mid+1;
}else{
r=mid;
}
}
return nums[l];
}
}