【发布时间】:2022-06-19 16:20:10
【问题描述】:
我的array of N integers 按非递减顺序排列。需要在数组中查找任何特定元素,如果找到则返回该数组的位置,否则返回-1
public static int find(int[] v, int bb) {
int N = v.length;
if (N == 0) {
return -1;
}
int l = 0;
int r = N - 1;
while (l < r) {
int m = (l + r) / 2;
if (v[m] > bb) {
r = m - 1;
} else {
l = m;
}
}
if (v[l] == bb) {
return l;
}
return -1;
}
我需要找出一个错误,即这对某些输入不起作用。我放弃了。
有什么建议吗?
【问题讨论】:
-
“非降序”是指它不是降序,还是说它是升序,但可能有重复的元素?另外,它不适用于哪些输入?
-
对,它不是按降序排列的。并且需要找出并修复它不起作用的地方
-
好的,如果你不知道它是按递增顺序排列的,你不应该尝试使用二分搜索。您可以按任何顺序单独检查每个元素,也可以先对数组进行排序,然后使用二进制搜索。