アルゴリズム – K番目の数字

問題説明

配列 arrayのi番目の数字からj番目の数字まで切り出して、ソートした時にK番目にある数字を知りたいです。

例えばarrayが[1,5,2,6,3,7,4]でi = 2、j = 5そしてk = 3だったら

  1. arrayの2番目から5番目まで取り出すと[5,2,6,3]です。
  2. 1から得られた配列をソートすると[2,3,5,6]です。
  3. 2から得られた配列の3番目の数字は5です。

配列array、[i, j, k]を持っている2次元配列commandsがパラメータとしてある場合、commandsの全てに対して上記で説明した演算を適用して出てきた結果を配列に保存し、returnするようにsolutionメソッドを作成してください。

条件

  • arrayの長さは1以上100以下です。
  • arrayの各要素は1以上100以下です。
  • commandsの長さは1以上50以下です。
  • commandsの各要素は長さが3です。

出力例

arraycommandsreturn
[1,5,2,6,3,7,4][[2,5,3], [4,4,1], [1,7,3]][5,6,3]
入出力例の説明
  • [1,5,2,6,3,7,4]を2番目から5番目まで切り出してからソートします。[2,3,5,6]の3番目の数字は5です。
  • [1,5,2,6,3,7,4]を4番目から4番目まで切り出してからソートします。[6]の1番目の数字は6です。
  • [1,5,2,6,3,7,4]を1番目から7番目まで切り出してからソートします。[1,2,3,4,5,6,7]の3番目の数字は3です。

解説

  • commandsからstart、end、k番目の数字のIndexを保存します。
  • 仮配列を作成します。その時の長さは「end – start + 1」です。
  • 2番目の繰り返しはi番目からj番目まで切り出す作業です。
  • Arrays.sortを利用してソートします。
  • return配列に保存します。(仮配列のk – 1番目の値)

他の人の解説も見てみましょう

Arrays.copyOfRangeを利用して配列をコピーしていますね。

勉強になりました。

copyOfRange

機会が早く来て実際に使ってみたいですね。

コメントを残す