LC153.寻找旋转排序数组中的最小值
思路:二分查找
- 此题的二分性体现在“最小值不可能在哪一侧,就把哪一侧放弃掉”
- 原题里面数组旋转过很多次了,但是无论怎么旋转,本质上都是两段
最小值一定出现在无序的一侧,如果
nums[mid] < nums[right]
,那右侧一定有序,反之左侧一定有序。代码:
class Solution {LC33.
public:
int findMin(vector<int>& nums) {
// 二段性:最小值不可能在哪一侧
int n = nums.size();
int left = 0, right = n - 1;
while (left < right) {
int mid = (left + right) / 2;
// 只要nums[right] > nums[mid]
// 右边一定需要放弃掉
if (nums[right] > nums[mid]) {
right = mid;
} else {
left = mid + 1;
}
}
return nums[left];
}
};