把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
思路:二分
下界lo, 上界hi, 每次使用numbers[mid] 与numbers[hi]比较判断最小数在那边。
numbers[mid] > numbers[hi] : 右边
numbers[mid] < numbers[hi] : 左边
numbers[mid] == numbers[hi] : 无法判断,可将hi收缩1进行查找。
代码:
int binarySearch(vector<int>& numbers, int lo, int hi) {
if(lo == hi)
return numbers[lo];
int mid = (lo + hi) / 2;
if(numbers[mid] > numbers[hi])
return binarySearch(numbers, mid + 1, hi);
else if(numbers[mid] < numbers[hi])
return binarySearch(numbers, lo, mid);
return binarySearch(numbers, lo, hi - 1);
}
int minArray(vector<int>& numbers) {
return binarySearch(numbers, 0, numbers.size() - 1);
}

本文介绍了一种通过二分搜索法高效寻找旋转数组中最小元素的方法。旋转数组是从递增数组旋转得到,如[3,4,5,1,2]由[1,2,3,4,5]旋转而成。文章详细解析了二分搜索法的应用,并提供了具体的代码实现。
2061

被折叠的 条评论
为什么被折叠?



