查找元素在数组中出现的位置

find a position of an element occurrence in array

我在下面的代码片段中,A 是非递减顺序,需要检查 X 是否出现在 A 中。如果 X 出现在 A 中,则 return XA 中出现的位置,否则 returns -1。此代码对于某些输入不正确,需要修复。最多修改3行

class Checking{
    int check(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;
    }
}

我无法找到解决方法,任何建议都会有帮助吗?

Wiki page说这样实现二分查找中间元素应该用上限计算,所以可以改成

int m = (l + r + 1) / 2;