我必須通過特定鍵(使用二分搜索方法)找到第一個和最後一個元素。我已經完成了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