题目
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
- leetcode链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/solution/
思路
- 检查是否为旋转的数组,不是的话直接返回第一个值
- 拿中间的元素去和最后一个元素相比较,一直缩小旋转点范围,知道找到旋转点
- 这个的解释比较详细:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/solution/mian-shi-ti-11-xuan-zhuan-shu-zu-de-zui-xiao-shu-3/
代码
/**
* @param {number[]} numbers
* @return {number}
*/
var minArray = function(numbers) {
let i = 0
let j = numbers.length - 1
if (numbers[i] < numbers[j]) return numbers[i]
while (i < j) {
const middle = Math.floor((i + j) / 2)
const middleNum = numbers[middle]
if (middleNum > numbers[j]) {
i = middle + 1
} else if (middleNum < numbers[j]) {
j = middle
} else {
j--
}
}
return numbers[i]
};