二分查找——搜索插入位置
核心思路
- 二分查找:每次把查找范围缩小一半,所以时间复杂度O(log n)。
- 指针定义:
- left:区间左边界
- right:区间有边界
- mid:中间位置
- 三种情况:
- nums[mid] == target → 找到,直接返回 mid
- nums[mid] < target → 目标在右边 → left = mid + 1
- nums[mid] > target → 目标在左边 → right = mid - 1
- 退出循环时:left > right,此时 left 就是应该插入的位置。
总结:
- 这是最标准、最简洁的 Java 二分查找解法
- 时间复杂度 O(log n),空间复杂度 O(1)
- 适用于 LeetCode 35 题:搜索插入位置
Java代码实现如下:
class Solution {
public int searchInsert(int[] nums, int target) {
// 左右指针
int left = 0;
int right = nums.length - 1;
while (left <= right) {
// 求中间索引(防止溢出写法)
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
// 找到目标,直接返回索引
return mid;
} else if (nums[mid] < target) {
// 目标在右侧,左指针右移
left = mid + 1;
} else {
// 目标在左侧,右指针左移
right = mid - 1;
}
}
// 循环结束没找到,left 就是插入位置
return left;
}
}
浙公网安备 33010602011771号