k番目の数

20153 ワード

問題の説明


配列の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です.

CODE


function solution(array, commands) {
  
  var answer=[]
  for (n=0;n<commands.length;n++){
    var i=commands[n][0]
    var j=commands[n][1]
    var k=commands[n][2]
     var slicearr=array.slice(i-1,j)
     
     var sortarr=slicearr.sort((a,b) => a - b))
     
     
     answer.push(sortarr[k-1])
    

  }
 return answer;
}

プロセス


n/a.計画

  • slice(i,j)
  • に切る
  • (昇順)
  • にソート
    は、
  • [k]要素を返します.
  • //이런식으로!!
    var arr=[1, 5, 2, 6, 3, 7, 4]
    
    var slicearr=arr.slice(1,5)
    
    slicearr
    (4) [5, 2, 6, 3]
    
    slicearr.sort()
    (4) [2, 3, 5, 6]
    
    
    var sortarr=slicearr.sort()
    
    sortarr[2]
    5

    I/Oサンプルごとに関数を作成

    function solution(array, commands) {
        var i=commands[0]
        var j=commands[1]
        var k=commands[2]
         var slicearr=array.slice(i-1,j) //아래 참고
         var sortarr=slicearr.sort()
         var answer=sortarr[k-1]
        
        
        
        return answer;
    }
    
    solution([1, 5, 2, 6, 3, 7, 4],[2,5,3])
    5
    solution([1, 5, 2, 6, 3, 7, 4],[4,4,1])
    6
    solution([1, 5, 2, 6, 3, 7, 4],[1,7,3])
    3
    
    なぜアレイなのか.slice(i-1,j)ですか?
    実際、2番目から5番目の間の数字だけを抽出すると、
    インデックス[1]から[4]の値を取得する必要があります.
    sliceには開始インデックスが含まれていますが、終了インデックスは含まれていません.
    slice(1,5)を実行するとarr[1]からarrを取得できる[4].
    これをiからjの間の数字として表すとslice(i-1,j)となる.

    各戻り値をアレイに収集し、一度に戻ります。


    I/Oの例により、
    コマンドは一度に複数の配列を与えます.
    var array=[1, 5, 2, 6, 3, 7, 4]
    var commands=[[2, 5, 3], [4, 4, 1], [1, 7, 3]]
    
    
    function solution(array, commands) {
      
      var answer=[]
      for (n=0;n<commands.length;n++){
        var i=commands[n][0]
        var j=commands[n][1]
        var k=commands[n][2]
         var slicearr=array.slice(i-1,j)
         
         var sortarr=slicearr.sort()
         
         
         answer.push(sortarr[k-1])
        
        /*test
        console.log(n+'번째')
        console.log('slicearr='+slicearr)
        console.log('sortarr='+sortarr)
        console.log('answer='+answer)
        /*
        
    /*실행결과
    
    0번째
    slicearr=2,3,5,6
    sortarr=2,3,5,6
    answer=5
    
    1번째
    slicearr=6
    sortarr=6
    answer=5,6
    
    2번째
    slicearr=1,2,3,4,5,6,7
    sortarr=1,2,3,4,5,6,7
    answer=5,6,3
    
    answer
    (3) [5, 6, 3]
    
        
    */   
     
      }
     return answer;
    }

    2回のテストに失敗しました(ソート順の定義)


    compareFunctionが指定されていない場合、jsはUnicodeポインタ順に文字列を比較ソートします.
    MDNでもこの点が紹介されており、その実現方式は以下の通りである.
    array1 = [1, 30, 4, 21, 100000];
    console.log(array1.sort());
    //array1 = [1, 100000, 21, 30, 4];
    したがって、文字列比較ではなく数値を比較する必要があるため、sort関数でソート順序を定義できます.
     var sortarr=slicearr.sort((a,b) => a - b))

    点数が出るはずだったのに.うっかり消して押したら、点数が出なくなってしまった.

    REVIEW


    slice()


    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
    arr.slice([begin[, end]])
    開始インデックスと終了インデックスの間の配列を抽出して返します.
    **切り取り抽出された要素には開始インデックスが含まれますが、終了インデックスは含まれません.
    つまり.
    var arr=[a,b,c,d,e]
    arr.slice(1,3)
    
    //[b,c] 
    //arr[1]인 b는 포함되지만, arr[3]인 d는 포함되지 않는다.
    
    

    splice()


    splice()メソッドは、配列内の既存の要素を削除または置換したり、新しい要素を追加したりすることで、配列の内容を変更します.
    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
    array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
    インデックスの開始?要素を削除し、残りの要素を返します.

    sort()


    ソート順の定義
    compareFunctionが指定されていない場合、jsはUnicodeポインタ順に文字列を比較ソートします.
    array1 = [1, 30, 4, 21, 100000];
    console.log(array1.sort());
    //array1 = [1, 100000, 21, 30, 4];
    したがって、文字列比較ではなく数値を比較する必要があるため、sort関数でソート順序を定義できます.
     var sortarr=slicearr.sort((a,b) => a - b))