JS二分法查找数值在数值中的区间
时间: 2023-03-19 10:23:40 浏览: 182
二分法可以用于查找一个数值在一个有序数组中的区间。以下是一个 JavaScript 的示例代码:
```javascript
function binarySearchRange(arr, target) {
let left = 0;
let right = arr.length - 1;
// 找到左边界
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
const start = left;
// 找到右边界
left = 0;
right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] <= target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
const end = right;
if (start <= end) {
return [start, end];
} else {
return [-1, -1];
}
}
```
这个函数接受两个参数,一个是有序数组 `arr`,一个是目标数值 `target`。它返回一个长度为 2 的数组,表示目标数值在数组中的区间的起点和终点。如果目标数值不在数组中,则返回 `[-1, -1]`。
这个函数的实现思路是首先找到目标数值在数组中的左边界,然后再找到目标数值在数组中的右边界。这两个边界的下标即为目标数值在数组中的区间的起点和终点。二分查找的时间复杂度为 $O(\log n)$,因此这个函数的时间复杂度为 $O(\log n)$。
阅读全文