题目
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个可能存在重复元素值的递增排序数组 numbers ,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。
题解:二分查找
/**
* @param {number[]} numbers
* @return {number}
*/
var minArray = function(numbers) {
let low = 0;
let high = numbers.length - 1;
while (low < high) {
const pivot = low + Math.floor((high - low) / 2);
if (numbers[pivot] < numbers[high]) {
high = pivot;
} else if (numbers[pivot] > numbers[high]) {
low = pivot + 1;
} else {
high -= 1;
}
}
return numbers[low];
};
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)