2011-05-25 65 views
0

可能重複:
Finding the second highest number in array的Java:抓住第二個最高

我有這個,

 for(int i=0;i<Dices.length;i++){ 
     if(Dices[i].getValue() > highest){ 
      highest = Dices[i].getValue(); 
     } 
     } 

獲得最高的價值。我現在想獲得第二高,我該怎麼做?我不能利用這個最高的變量獲得第二高的優勢嗎?

+0

您有最高的定義值?爲什麼你沒有一個明確的價值第二高的?把它們放在一個ArrayList中,按升序對它們進行排序,循環遍歷它們並存儲以前的值。 – Fredrik 2011-05-25 16:25:57

+0

你有一個「死」和一些「骰子」不是「骰子」。 – 2011-05-25 16:56:44

回答

5

如何在O(n)速度:

// first, second, d0, d1, di all typed by whatever getValue() returns... 
// This assumes you have at least two elements in your Dices array 

d0 = Dices[0].getValue(); 
d1 = Dices[1].getValue(); 
if (d0 > d1) { 
    first=d0; 
    second=d1; 
} else { 
    first=d1; 
    second=d0; 
} 

for (int i = 2; i < Dices.length; i++) { 
    di = Dices[i].getValue(); 
    if (di > first) { 
     second = first; 
     first = di; 
    } else if (di > second) 
     second = di; 
} 
+1

@安迪偉大的解決方案!這正是我在評論@肖恩的答案時所考慮的事情。 – 2011-05-25 16:41:41

+0

@Ryan謝謝你,先生! – Andy 2011-05-25 16:42:16

+0

@Andy,+1爲實現正確的解決方案 – mre 2011-05-25 16:44:03

2
  • Sort the array使用自定義 Comparatormake a copy of the array 如果不能排序的原件)
  • 挑倒數第二,一個數組排序的項目:

    // hopefully you have checked in advance that there is more than one item 
    return sortedDices[sortedDices.length-2]; 
    
+0

由於我們只是在談論最高的兩個,你必須排序整個陣列?我只是想把邏輯放在你遍歷數組一次的地方。我同意排序陣列是最好的解決方案,只是試圖在盒子外面思考。 – 2011-05-25 16:33:40

+0

@Ryan這是最好的取決於情況。礦是最可用和可管理的,安迪是最有效的(至少對於大型陣列) – 2011-05-25 17:01:52