(JS)Programmers:k個の数字


問題の説明


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

    せいげんじょうけん

  • arrayの長さは100を超えない.
  • arrayの各要素は1または100未満です.
  • コマンドの長さは50を超えません.
  • コマンドの各要素の長さは3です.
  • I/O例



    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です.
    問題を解く
  • 二次元配列の要素に近づくために,種々の方法を試みたが,明確な方法はなかったので,ハードコーディングを採用することにした.いずれにしても配列中の要素に近い方法は[I index][Jindex]を貼り付けることで近づけることができるので,解題は難しくない.
  • ですが.commandの長さが長くなると,このような方法で解くことができない幸運の心理を,最大限ハードコーディングを指す方法で解く必要がある.
  • function solution(array, commands) {
        let answer = [];
        let len = commands.length
        
        for(let a = 0; a < len; a++) {
            let i = commands[a][0];
            let j = commands[a][1];
            let k = commands[a][2];
       
            let temp = array.slice(i-1, j)
            temp.sort((x,y) => x-y);
            let tempNum = temp[k-1]
            answer.push(tempNum);
        }
        
        return answer;
    }

    その他の質問に答える

    
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function solution(array, commands) {
        var answer = [];
    
        for(var i in commands) {
            let subArr = array.slice(commands[i][0] - 1, commands[i][1]);
            subArr.sort((a, b) => a - b);
            answer.push(subArr[commands[i][2] - 1]);
        }
    
        return answer;
    }
    for-in文を使って、配列を指定しなくても簡潔に展開できるのが印象的でした.