Skip to main content

寻找旋转排序数组中的最小值-ii

题目

这个题是 153.寻找旋转排序数组中的最小值 的扩展版, 也就是旋转数组中的元素可重复.

示例

输入: [2, 2, 3, 0, 2, 2]

输出: 0

题解

比起第 153 题, 这里需要关注 nums[pivot]nums[high] 相等的情况, 因为在 [mid, high] 的这个小区间里, 右边的数字一定大于等于左边的, 因此 nums[pivot]nums[high] 相等时, high = high - 1 即可.

/**
* @param {number[]} nums
* @return {number}
*/
var findMin = function (nums) {
let low = 0
let high = nums.length - 1

while (low < high) {
const pivot = (low + (high - low) / 2) | 0

if (nums[pivot] > nums[high]) {
low = pivot + 1
} else if (nums[pivot] < nums[high]) {
high = pivot
} else {
high -= 1
}
}
return nums[low]
}