查找元素在数组中出现的位置
find a position of an element occurrence in array
我在下面的代码片段中,A
是非递减顺序,需要检查 X
是否出现在 A
中。如果 X
出现在 A
中,则 return X
在 A
中出现的位置,否则 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;
我在下面的代码片段中,A
是非递减顺序,需要检查 X
是否出现在 A
中。如果 X
出现在 A
中,则 return X
在 A
中出现的位置,否则 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;