算法
Smallest element in rotated sorted array
寻找旋转排序数组中的最小值
思路
一个排好序但被旋转的数组,最小值一定是旋转点。
例如:
原数组
[1, 2, 3, 4, 5]
旋转后可能变成
[4, 5, 1, 2, 3]
其中最小值是 1,它也是排序断点的位置。
利用二分查找来定位最小值即可。
算法步骤
-
令
left = 0,right = n - 1,中点mid = Math.floor((left + right) / 2) -
判断
numbers[mid]与numbers[right]:numbers[mid] > numbers[right]说明最小值在mid右侧,令left = mid + 1numbers[mid] < numbers[right]说明最小值在mid或左侧,令right = mid
-
当
left === right时,即为最小值位置。
代码实现
function findMin(numbers: number[]): number {
let left = 0;
let right = numbers.length - 1;
while (left < right) {
const mid = Math.floor((left + right) / 2);
if (numbers[mid] > numbers[right]) {
left = mid + 1;
} else {
right = mid;
}
}
return numbers[left];
}在 GitHub 上编辑
上次更新于