旋转数组的最小数字
题目链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/
思路:排序数组->二分法。题目要求找出「旋转点的值」,因此有以下分析:
- 中点大于右边界,说明旋转点在中点右侧,更新左边界为中点
- 中点小于右边界,说明旋转点在中点左侧,更新右边界为中点
- 中点等于右边界,此时无法判定旋转点在哪个区间,但由于中点和右边界的值相等,因此将右边界-1不会遗漏旋转点的值
参考代码:
class Solution {public:int minArray(vector<int>& numbers) {int upper = numbers.size() - 1;int lower = 0;while (lower < upper) {int pivot = lower + (upper - lower)/2;if (numbers[pivot] < numbers[upper]) {upper = pivot;}else if (numbers[pivot] == numbers[upper]) {--upper;}else {lower = pivot + 1;}}return numbers[lower];}};
