【问题标题】:Why my binary search using while loop dosnt work?为什么我使用 while 循环的二进制搜索不起作用?
【发布时间】:2021-10-16 18:12:40
【问题描述】:

我尝试使用 while 循环编写二进制搜索代码,但我错过了一些东西,因为它不适用于所有输入。

function solution(A, X) {
    var N = A.length;
    if (N === 0) {
        return -1;
    }
    var l = 0;
    var r = N-1;
    while (l < r) {
        var m = Math.floor((l + r) / 2);
        if (A[m] > X) {
            r = m - 1;
        } else {
            l = m;
        }
    }
    if (A[l] == X) {
        return l;
    }
    return -1;
}

我错过了什么?

【问题讨论】:

    标签: binary-search


    【解决方案1】:

    你在三点上犯了错误:

    1. While循环:应该是

      while (l &lt;= r)

    2. X > A[m]时的其他条件:

      l = m + 1;

    3. 寻找元素。在二分查找中,我们检查存在于中点的元素,正如您在 A[l] 处检查的那样。应该是

       if (A[m] == X){
        return m;
      }
      

    你也写了 N===0。你可能在那里犯了语法错误。

    【讨论】:

      猜你喜欢
      • 2023-02-05
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2022-01-26
      • 2022-12-12
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多