3 回答

TA貢獻1816條經驗 獲得超4個贊
你可以試試這個:
Map<Integer, Map<Integer, Long>> mmap = linkTable.stream()
.collect(groupingBy(DonorsToPatientPair::getDonorID,
groupingBy(DonorsToPatientPair::getPatientID, counting())));
變量 mmap 現在包含一個鍵映射到該鍵到頻率的值映射。如果你想得到(d, p)的出現次數,你可以這樣得到:
long freq = mmap.get(d).get(p)
為了處理地圖,您可以使用如下代碼:
for (int donor : mmap.keySet()) {
Map<Integer, Long> patientMap = mmap.get(donor);
if (patientMap.size() < 2) {
continue; // no duplicates
}
// *** your code here ***
}
對于您自己的代碼,您在循環中擁有捐贈者和從患者到其頻率的地圖。剩下的工作應該很容易完成。

TA貢獻1827條經驗 獲得超4個贊
您可以使用 x 值作為排序條件對數組進行排序。然后將數組切成具有相同 x 值的較小數組對。然后,您使用當前的算法僅在較小的塊中本地查找重復項。雖然這仍然有嵌套循環,但它會執行得更快,因為搜索僅限于小數組,當 n 是元素數時,具有兩個嵌套循環的搜索的復雜度為 O(n*n)。
添加回答
舉報