二分查找输出结果错误,想知道哪里错误

img


这个二分查找为什么我交的是错误的,不可以这样吗,想问一下错在哪里

我觉得这个题好像有问题啊,预期结果不应该是 -1么,没查找到啊

img

在您提供的代码中,存在两个问题:

  1. 在初始化变量 j 时,应将其设置为 nums.length - 1,而不是 nums.length。这是因为数组的索引是从 0 开始的,因此最后一个元素的索引应该是 nums.length - 1。修改后的代码如下:
int j = nums.length - 1;
  1. 当未找到目标元素时,您的代码返回 -1。根据题目要求,如果目标元素不存在于数组中,应返回目标元素应该插入的位置。因此,当循环结束时,应该返回插入位置 i,而不是 -1。修改后的代码如下:
return i;

修复以上两个问题后,完整的代码如下:

public int searchInsert(int[] nums, int target) {
    int i = 0, j = nums.length - 1;
    while (i <= j) {
        int m = (i + j) / 2;
        if (target < nums[m]) {
            j = m - 1;
        } else if (nums[m] < target) {
            i = m + 1;
        } else {
            return m;
        }
    }
    return i;
}

请注意,我还将 j 的更新修改为 j = m - 1,以确保在目标元素不存在于数组中时,循环可以正确结束。

希望这能帮助您解决问题。