JSプログラマー/ベストアルバム


問題の説明
ストリーミングサイトでは、最も多く再生された曲を2曲集め、ベストアルバムを発売します.曲は唯一の番号で区切られており、収録曲の基準は以下の通りである.
まずはたくさんの曲が流れているタイプを収录
まずはジャンル内で流れる曲を収録
タイプ内で同じ再生回数の曲には、まず固有番号の低い曲が収録される.
曲タイプを表す文字列配列タイプと、曲の再生回数を表す整数配列シナリオを指定する場合は、solution関数を完了し、最適なアルバムを入れる曲の一意の番号を順番に返します.
せいげんじょうけん
genres[i]はiという唯一のナンバーの曲です.
プレイ[i]は、iと番号付けされた唯一の曲の再生回数である.
genesはplaysと同じ長さで、1または10000未満です.
タイプは100種類未満です.
タイプの1曲であれば、1曲だけ選びます.
すべてのタイプで再生回数が異なります.
I/O例
genres plays return
["classic", "pop", "classic", "classic", "pop"][500, 600, 150, 800, 2500] [4, 1, 3, 0]
I/O例説明
クラシックタイプは1450話を放送し、クラシック曲は以下の通りである.
ユニーク番号3:800再生
ユニーク番号0:500再生
ユニークナンバー2:150再生
popタイプは3100回再生され、pop曲は以下の通りである.
ユニーク番号4:2500再生
ユニーク番号1:600再生
そこで、まずポップタイプの[4,1]番の曲を収録し、クラシックタイプの[3,0]番の曲を収録します.
function solution(genres, plays) {
    let answer = [];
    let totalPlay = {};
 for (let i = 0; i < genres.length; i++) {
   if (totalPlay[genres[i]]) {
     totalPlay[genres[i]]+=plays[i];
   } else {
       totalPlay[genres[i]] = 0;    
       totalPlay[genres[i]]+=plays[i]; 
   }
 }
let sorted = Object.entries(totalPlay).sort((a, b) => b[1] - a[1]);
let topMusic = []
for(let element of sorted) {
	topMusic.push(element[0])
}
for(let item of topMusic){
for(let i =0; i<2; i++){
    if(!genres.includes(item)) break;
    let max=-1;
    let maxIndex=0;
for (let index in plays) {    
    if(item==genres[index]&& max<plays[index]){
        max=plays[index];
        maxIndex= index;
    } 
  }
  answer.push(Number(maxIndex))
  delete plays[maxIndex]
  delete genres[maxIndex]
} 
}
return answer
}
初めての正解率が53%だったのでパニックになってしまいました.この歌は1曲しかない時に間違えたのか.
if(!genres.includes(item)) break;
上記のコードを加えて修正しました.私はいろいろなテストケースを考えなければなりません.
++コードコメント)
totalplay object{classic:1450,pop:3100}には、タイプと合計値が含まれます.高集約順に並べ替えてtopmusicに入れます.このときtopmusicの値は「pop」、「classic」です.topmusicのアイテム数を繰り返し、タイプが適切で再生数の高いインデックス値をresultにプッシュし、削除を繰り返しずに2番目の大きな数字を抽出します.(クリップはインデックスに影響するのでdeleteとして削除します.)