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.計画
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.計画
は、
//이런식으로!!
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))
Reference
この問題について(k番目の数), 我々は、より多くの情報をここで見つけました
https://velog.io/@gygy/k번째-수
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
arr.slice([begin[, end]])
var arr=[a,b,c,d,e]
arr.slice(1,3)
//[b,c]
//arr[1]인 b는 포함되지만, arr[3]인 d는 포함되지 않는다.
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
var sortarr=slicearr.sort((a,b) => a - b))
Reference
この問題について(k番目の数), 我々は、より多くの情報をここで見つけました https://velog.io/@gygy/k번째-수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol