二进制搜索重构

时间:2018-03-20 17:51:13

标签: java

昨晚我接受了这个测试。

` int binaryS(int[] A, int X) {
        int N = A.length;
        if (N == 0) {
            return -1;
        }
        int l = 0;
        int r = N - 1;
        while (l < r) {
            int m = (l + r) / 2;
            if (A[m] > X) {
                r = m - 1;
            } else {
                l = m;
            }
        }
        if (A[l] == X) {
            return l;
        }
        return -1;
    }`

我必须调试/重构代码。 条件:“您只能修改三行”。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

二进制搜索的正确代码是:

while (l < r) {
    int m = (l + r) / 2;

    if (A[m] == X) {
        return m;
    }
    if (A[m] > X) {
        r = m - 1;
    } 
    else if (A[m] < X) {
        l = m + 1;
    }
}
return -1;

只需将'found'条件放在循环中的任何其他条件之前,你就可以了!