以力扣35题为例:
class Solution {
public int searchInsert(int[] nums, int target) {
int low = 0;
int high = nums.length - 1;
while (low <= high) {
int mid = low + (high - low) / 2; // 防溢出
if (nums[mid] == target) {
return mid; // 找到直接返回
} else if (nums[mid] < target) {
low = mid + 1; // 目标在右半区
} else {
high = mid - 1; // 目标在左半区
}
}
// 🔑 关键:循环结束时 low 即为插入位置
// 原因:low 始终指向“第一个大于 target 的位置”或数组末尾
return low;
}
}
二分查找是不断的把一个已经排序过的数组进行拆分,在一半的一半进行查找,最终会找到结果。