目录
LeetCode第35题

题
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为
O(log n)的算法。

二分查找逻辑
每次循环都将搜索范围减半:
- left 和 right 初始覆盖整个数组
- 每次循环后,left 或 right 更新,将搜索范围减半
- 最坏情况下需要 log₂n 次循环
Code
javascript
var searchInsert = function (nums, target) {
let left = 0;
let right = nums.length - 1;
while (left <= right) {
const mid = left + Math.floor((right - left) / 2);
if (nums[mid] === target) {
return mid; // 找到目标,直接返回索引
} else if (nums[mid] < target) { // 目标在右侧
left = mid + 1;
} else { // 目标在右侧
right = mid - 1;
}
}
// 循环结束后,left 就是插入位置
return left;
};