我必须通过特定键(使用二分搜索方法)找到第一个和最后一个元素。我已经完成了searchFirst方法,但我无法完成searchLast方法。有时它有时不起作用(这取决于价值即时寻找),那就是问题所在。如何通过特定键找到数组中的最后一个元素
我有一个数据类与一些属性,如时间戳,名称,产品等即时读取出一个文本文件。当我完成填充Data数组时,我使用合并排序对数组进行排序。
然后,我需要通过特定名称的数组的第一个和最后一个元素。
searchFirst方法很完美,但searchLast不会做我想做的。
下面是searchLast方法的代码(n是他应该查找的值,w此时不使用)。
public static int searchLast(Data[] array, String n, String w) {
int left = 0;
int right = array.length - 1;
int m = -1;
while (left < right) {
m = (left + right)/2;
if (array[m].getName().compareTo(n) > 0) {
right = m - 1;
} else {
left = m + 1;
}
}
if (m >= 0) {
if (array[right].getName().equals(n)) {
return right;
}
}
return NO_KEY;
}
我无法找到的bug,也许你可以帮我......有时代码发现最后一个有时不...
你能不能给我们的一个例子输入不起作用? – Keppil 2013-04-23 19:15:20
我不知道我是否允许发布输入数组,但getName返回一个类似“GXA:name”的字符串; x是一个数字,例如我在寻找像“G13A:Shuffle”这样的字符串。是否有足够的信息? - 我认为它和我在整数数组中寻找特定数字的最后一个元素一样。 – XenonUnlimited 2013-04-23 19:20:12
'searchFirst'和'searchLast'让我知道列表中可能有多个重复的值。而二进制搜索不处理这种情况。一旦找到它,它就完成了。它是否必须是二分查找? – 2013-04-23 19:25:28