二分插入

小鸟游星野
小鸟游星野
发布于 2025-04-01 / 8 阅读
0
0

二分插入



问题一:当数组中包含 target 时,插入点的索引是否是该元素的索引?

题目要求将 target 插入到相等元素的左边,这意味着新插入的 target 替换了原来 target 的位置。也就是说,当数组包含 target 时,插入点的索引就是该 target 的索引。

问题二:当数组中不存在 target 时,插入点是哪个元素的索引?

进一步思考二分查找过程:当 nums[m] < target 时 
 移动,这意味着指针 i
 在向大于等于 target 的元素靠近。同理,指针j 
 始终在向小于等于 target 的元素靠近。

因此二分结束时一定有:
 指向首个大于 target 的元素,
 指向首个小于 target 的元素。易得当数组不包含 target 时,插入索引为 
 。代码如下所示:
/* 二分查找插入点(无重复元素) */
int BinarySearchInsertionSimple(int[] nums, int target) {
    int i = 0, j = nums.Length - 1; // 初始化双闭区间 [0, n-1]
    while (i <= j) {
        int m = i + (j - i) / 2; // 计算中点索引 m
        if (nums[m] < target) {
            i = m + 1; // target 在区间 [m+1, j] 中
        } else if (nums[m] > target) {
            j = m - 1; // target 在区间 [i, m-1] 中
        } else {
            return m; // 找到 target ,返回插入点 m
        }
    }
    // 未找到 target ,返回插入点 i
    return i;
}


评论