[アルゴリズム]2 Dナビゲーション-等高線
6491 ワード
等号を求める
N(1<=N<=100)名の生徒の国語点数を入力する場合は、入力順に生徒毎の点数を出力するプログラムを作成します.
■説明の入力
1行目はN(3<=N<=1000)、2行目はN個の国語の点数を表す整数を入力します.同じ点数を入力すると、高い点数で同じ処理を行います.すなわち、最高点数は92点で、3位92点があれば、1位は3位で、次いで4位だった.
■出力説明
入力した順に等号を出力します.
■入力例1
5
87 89 92 100 76
■出力例1
4 3 2 1 5
説明する
function solution(arr) {
let answer = [];
let sortedArr = [...arr].sort((a, b) => b - a);
arr.forEach((item) => answer.push(sortedArr.indexOf(item) + 1));
return answer;
}
実は時間がかかった問題ですどうやって解けばいいのか、もう予感がした.降順で並べ替えた後、並べ替えた配列の中で伝達された配列の中の項目を1つずつ検索し、インデックスがどれだけあるかを見つけ、正しい配列で腕立て伏せを行います.でもうろうろしている部分はどこなのか、let sortedArr = arr.sort((a, b) => b - a);
この部分です.スプレッドシート演算子は使用されず、アレイsort
でソートされ、結果は望ましくありません.いったい何が問題なのか.現在のsortedArr
がコンソールに表示されている場合、電子演算子を使用するか使用しないかは同じです.JavaScriptが配列を新しい変数に割り当てる場合、新しい配列は既存の配列を参照します.したがって、新しいアレイを変更すると、元のアレイも変更されます.したがって、
arr
を並べ替える場合、forEach
関数が呼び出され、得られる結果は異なる.上はスプレッドシート演算子
sort
を用いたarr状態であり,次は配列を直接新しい変数に割り当てた状態である.下が整列していることがわかります.したがって、
sort
メソッドは元のアレイを変更するので、元のアレイを電子演算子として浅い複製を行うアレイsort
が正しい!講師の説明
function solution(arr){
let n=arr.length;
let answer=Array.from({length:n}, ()=>1);
for(let i=0; i<n; i++){
for(let j=0; j<n; j++){
if(arr[j]>arr[i]) answer[i]++;
}
}
return answer;
}
これは最も一般的な2つの解題方法です.Reference
この問題について([アルゴリズム]2 Dナビゲーション-等高線), 我々は、より多くの情報をここで見つけました https://velog.io/@shinwonse/알고리즘-2차원-탐색-등수구하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol