• ベストアンサー

second max

題名の通り、二番目や三番目の最大値を求めようとしているのですが どのように手をつけたらいいのか検討がつきません。 (maximumOfArreyElementsをうまく応用するくらいしか想像出来ません。) 三時間ほど考えましたが、解決策が見つからず、ここへ質問している次第です。 解決法があれば、ご教授お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.3

一番簡単なソートです。 class SortAndShowMax { public static void main(String args[]){ int[] intArray = {1,2,3,4,5,6,7,8,9}; int tmp = 0; for(int i = 0; i < intArray.length; i++){ for(int j = i + 1; j < intArray.length; j++){ if(intArray[i] < intArray[j]){ tmp = intArray[i]; intArray[i] = intArray[j]; intArray[j] = tmp; } } } System.out.println("MaxOne:" + intArray[0]); System.out.println("MaxTwo:" + intArray[1]); System.out.println("MaxThree:" + intArray[2]); } }

jun-nosuke
質問者

お礼

お礼が遅れて申し訳ございません。 ご解答、有難うございました。 記述していただいたソートをじっくりと拝見させていただきました。 >tmp = intArray[i]; intArray[i] = intArray[j]; intArray[j] = tmp; これがソートの仕組みのポイントですね、納得です。 参考になりました、有難うございました。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1>ソートの方法も具体的に教えてください。 データの構造にもよりますけど、 java.util.Arrays.sort(T[], java.util.Comparator) とか java.util.Collections.sort(java.util.List,java.util.Comparator) とかが使えると思います。 キーが重複を許さないのであれば、 MapTree なども使えると思います。 そうした標準的な、データ構造を使わないのであれば、 一通り、全部のデータをなめれば、最大値が求まりますし、 2番目の最大値は、1番目の最大値を除いたデータで、最大値を求めれば良いと思います。(以下同じ)

jun-nosuke
質問者

お礼

お礼が遅れました、ご解答有難うございます。 >2番目の最大値は、1番目の最大値を除いたデータで、最大値を求めれば良いと思います。(以下同じ) 確かにこのように考えれば、納得がいきます。 一番目の最大値を除く、という所がミソですね。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

ソートしてしまうとか (選択法で三つ目までを求めるとか)

jun-nosuke
質問者

お礼

累計2回目のご回答有難うございます。 ソートして値を並び替えることも考えたのですが、いまいちソートの 方法がわからず、途方に暮れております。 出来ましたら、ソートの方法も具体的に教えてください。 よろしくお願いします。

関連するQ&A