[Java]ソートK個数

6453 ワード

問題の説明


配列のi番からj番までを切り取って並べ替えると、k番目の数字を求めようとします.
例えばarrayが[1,5,2,6,3,7,4],i=2,j=5,k=3の場合
arrayの2番目から5番目の場合は[5,2,6,3].
1の配列を並べ替えると[2,3,5,6].
2からの配列の3番目の数字は5です.
配列配列、[i、j、k]を要素とする2次元配列コマンドをパラメータとして与える場合は、commandsのすべての要素に前述の演算を適用した結果を配列に戻してsolution関数を作成します.

せいげんじょうけん


arrayの長さは1または100以下です.
arrayの各要素は1または100未満です.
コマンドの長さは1または50を超えません.
コマンドの各要素の長さは3です.

I/O例


array commands return
[1, 5, 2, 6, 3, 7, 4][2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

I/O例説明


[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]の最初の数字は6である.
[1,5,2,6,3,7,4]最初から7番目にカット[1.2.3.4.5.6.7]の3番目の数字は3です.

草を切る

def solution(array, commands):
    answer = []
    for i, j, k in commands :
        new_arr = array[i-1 : j]
        new_arr.sort()
        answer.append(new_arr[k-1])
    return answer
配列によるインデックス作成で簡単に解決できる問題.
iはインデックスであり、i−1であり、インデックスにend(j−1)は含まれないため、(j−1)に+1を加えてjに切り取る.
次にPythonのsort()関数を用いて剪断後の配列を並べ替える.
次に、k番目(インデックスk−1)の値を答え配列に追加する.
profile

Java解釈

import java.util.*;
class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        for(int i =0; i<commands.length; i++) {
            int[] temp = Arrays.copyOfRange(array, commands[i][0]-1,commands[i][1]);
            Arrays.sort(temp);
            answer[i] = temp[commands[i][2]-1];
        }
        return answer;
    }
缲り返すドア
配列をcopyOfRangeにカットします.
昨日習ったArrayssort()を使用してソートします.
保存したk番目の数字でarray[k]にアクセスします.
回答[0]から、整然と入れます.