我正在實現一個代碼來返回數組中的第n個最大數字, 以下是我實現的代碼;在Java中使用迭代器
public int getNthLargestNum(int [] givenArr, int n){
int nTotal=0;
int nNthNum = -1;
// Remove Duplicates
Set<Integer> o_hs = new TreeSet<Integer>();
for(int insert=0; insert<givenArr.length; insert++)
{o_hs.add(givenArr[insert]);}
Iterator it = o_hs.iterator();
int count=0;
while(it.hasNext()){
if(count == n){
// IF I MOVE THE LINE HERE
// nNthNum = (Integer)it.next();
break;
}
nNthNum = (Integer)it.next();
count++;
}
return nNthNum;
}
如果我輸入數組givenArr [4,14,4,5,6,8,9]和n = 2的輸出是5上面的程序,但如果我移動線nNthNum =(整數)it.next();在if循環內輸出4.
所以我很想知道要循環遍歷循環,我們應該始終實現it.next()?
我打算用Set來重複複製。但是如果數據很大,TreeSet將會受到一次perfomrance的攻擊嗎?有沒有其他方法可以刪除重複項。我知道我可以使用HashMaps並將計數存儲爲值,除HashMap以外是否還有其他選擇? – JNL
'TreeSet'不會比你從'Arrays.sort'獲得的任何更高的性能。 –
@JNL對你的數據調用'Sort'已經對使用'SortedSet'有相同的性能影響。將n項添加到'SortedSet'爲O(n * log(n)),排序n項爲O(n * log(n))。通過將這些項目添加到'SortedSet'中,您不需要*執行數組排序。此外,請專注於首先獲取工作數據,然後根據需要進行優化。使用算法在產生錯誤結果時速度更快是沒有意義的。 – Servy