153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode)
是 LeetCode第 33 题:搜索旋转排序数组(C++)_qq_32523711的博客-CSDN博客 的简单版本,我们只需要二分法查找第一个小于首元素的元素就可以啦,如果找不到,那最小的肯定就是首元素。
class Solution {
public:
// 二分查找第一个小于首元素的元素
int bsearch(vector<int> &a, int low, int high){
while(low <= high){
auto mid = low + ((high - low)>>1);
if(a[mid] < a[0]){
if(mid == 0 || a[mid-1] >= a[0])
return mid;
else high = mid - 1;
}else
low = mid + 1;
}
return -1;
}
int findMin(vector<int>& nums) {
auto index = bsearch(nums, 0, nums.size()-1);
if(index == -1) return nums[0];
return nums[index];
}
};
题目只要求元素值,不需要下标:
class Solution {
public:
// 二分查找第一个小于首元素的元素
int findMin(vector<int>& nums) {
int low = 0, high = nums.size()-1;
while(low <= high){
auto mid = low + ((high - low)>>1);
if(nums[mid] < nums[0]){
if(mid == 0 || nums[mid-1] >= nums[0])
return nums[mid];
else high = mid - 1;
}else
low = mid + 1;
}
return nums[0];
}
};