[プログラマー]K番目の数字


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です.
  • 私の答え

    function solution(array, commands) {
        var result = new Array(commands.length);
        for(var x = 0; x < commands.length; x++){
            var command = commands[x];
            var i = command[0]; 
            var j = command[1]; 
            var k = command[2];
            var slice_f = array.slice(i-1,j);
            var sort_f = slice_f.sort();
            result[x] = sort_f[k-1];
            }
        var answer = result;
        return answer;
    }
    }

    他人の解答

    function solution(array, commands) {
        let answer = [];
        for(let i = 0; i < commands.length; i++){
          let eachCommand = commands[i]
          let slice = array.slice(eachCommand[0] - 1, eachCommand[1])
          answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1])
        }
    
        return answer;
    }
    }

    P.S.


    他の人の解答から見ると、総じて言えば、私が書いたコードと似ていますが、変数は少ないです.ドアはpush法で配列の中に置かれているので、ドアは回転しているからです.特に,変数宣言の概念が不完全であるためvarは氾濫している.😂 この機会に、変数タイプについて勉強し、整理します.
    sortメソッドを使用する場合、sort()のみを使用して作成した結果、テスト・ケースが失敗し、sort((a,b)=>a-b)の形式でsortメソッドにcompareFunctionを提供する必要があります.
    この問題を解決する過程で,よくうろうろする部分はfor文がループするたびに生成される値を配列とする.値を保存する配列をfor文に置くのは恥ずかしいけど😳 最終的に自分で見つけて悟ったので、これで十分です.