この「2合計」の質問JavaScriptをコーディングするためのより効率的な方法はありますか
私たちの仕事は、せいぜい線形時間で2和問題を解く関数を書くことです。
2和問題
整数の配列が与えられた場合、特定のターゲット数になるように2つの数を見つける必要があります。
関数twoSumは、ターゲットに加算される2つの数値のインデックスを返す必要があり、2つの要素がターゲットに加算されない場合、関数は空の配列を返す必要があります。
O(n)時間で問題を解決する
ハッシュマップを使用して、すでに表示されているアイテムの記録を保持します。各パスで、現在の要素に追加されたときにターゲットに追加される要素がマップに存在するかどうかを確認します。存在する場合は、次のような配列を返します。それらのインデックスと、この条件を満たさずにループ全体を通過すると、空の配列が返されます。
例
const arr = [2, 5, 7, 8, 1, 3, 6, 9, 4]; const sum = 10; const twoSum = (arr, sum) => { const map = {}; for(let i = 0; i < arr.length; i++){ const el = sum - arr[i]; if(map[el]){ return [map[el], i]; }; map[arr[i]] = i; }; return []; }; console.log(twoSum(arr, sum)); console.log(twoSum(arr, 12)); console.log(twoSum(arr, 13)); console.log(twoSum(arr, 14)); console.log(twoSum(arr, 24));
出力
コンソールの出力は-
になります[ 2, 5 ] [ 1, 2 ] [ 1, 3 ] [ 3, 6 ] []
-
JavaScriptで可能な最大ペア合計を達成する
問題 最初で唯一の引数として長さ2nの整数の配列arrを受け取るJavaScript関数を作成する必要があります。 この関数のタスクは、これらの整数をn組の整数にグループ化することです。たとえば、(a1、b1)、(a2、b2)、...、(an、bn)は、すべてのmin(ai、bi)の合計になります。 iは1からnまで可能な限り大きくします。 たとえば、関数への入力が-の場合 const arr = [1, 4, 3, 2]; その場合、出力は-になります。 const output = 4; 出力の説明 nは2で、ペアの最大合計は4 =min(1、2)+ min(3、4)です。 例
-
JavaScriptのパーティションの平均の最大合計
問題 最初の引数として数値の配列arrを取り、2番目の引数として数値num(num <=arrのサイズ)を受け取るJavaScript関数を作成する必要があります。 この関数は、要素を残さないように、配列arrを最大でnum個の隣接する(空でない)グループに分割する必要があります。 このようなすべてのパーティションから、すべてのグループの平均の合計が最大になるパーティションを関数で選択する必要があります。 そして最後に、この最大の金額を返す必要があります。 たとえば、関数への入力が 入力 const arr = [10, 2, 3, 4, 10]; const num = 3;