JavaScriptで配列内の固有のペアを見つける
問題
最初で唯一の引数として、整数の配列arrを受け取るJavaScript関数を作成する必要があります。
この関数は、次の条件を満たすすべてのインデックスペア(i、j)の出現をカウントする必要があります-
-
I
-
arr [i]> 2 * arr [j]
たとえば、関数への入力が-
の場合const input = [2, 4, 3, 5, 1];
その場合、出力は-
になります。const output = 3;
出力の説明:
必要な3つのペアは-
であるため[4, 1], [3, 1] and [5, 1]
例
このためのコードは-
になりますconst arr = [2, 4, 3, 5, 1]; const peculiarPairs = (arr = []) => { let count = 0; let copy = arr.slice().sort((a,b)=> a - b); let bit = new Array(arr.length+1).fill(0); for (const num of arr){ count += search(bit, indexed(copy, 2*num+1)); bit = insert(bit, indexed(copy, num)); }; return count; }; const search = (bit, i) => { let sum = 0; while (i < bit.length){ sum += bit[i]; i += i & -i; } return sum; } const insert = (bit, i) => { while (i > 0){ bit[i] += 1; i -= i & -i; } return bit; } const indexed = (arr, val) => { let l = 0, r = arr.length-1, m = 0; while (l <= r) { m = l + ((r-l) >> 1); if (arr[m] >= val){ r = m-1; }else{ l = m+1; } } return l+1; } console.log(peculiarPairs(arr));
コードの説明
ここでは、バイナリインデックスツリー(BIT)を使用しました-
バイナリインデックスツリーまたはBITは配列として表されます。配列をBITree[]とします。バイナリインデックスツリーの各ノードは、入力配列のいくつかの要素の合計を格納します。バイナリインデックスツリーのサイズは、入力配列のサイズと同じです。
出力
そして、コンソールの出力は-
になります3
-
JavaScriptで配列の最小時間差を見つける
問題 「時:分」形式で24時間制の時刻の配列を受け取るJavaScript関数を作成する必要があります。この関数は、配列内の任意の2つの時点間の最小分の差を見つける必要があります。 たとえば、関数への入力が-の場合 const arr = ["23:59","00:00"]; その場合、出力は-になります。 const output = 1; 時間の最小差は1分なので 例 以下はコードです- const arr = ["23:59","00:00"]; const findMinDifference =
-
JavaScriptで配列の中央値インデックスを見つける
問題 1次元空間内のさまざまな小惑星の位置を表す配列arrを取り込むJavaScript関数を作成する必要があります。 各小惑星について、絶対値はそのサイズを表し、符号はその方向を表します(正の意味は右、負の意味は左)。各小惑星は同じ速度で移動します。 私たちの機能は、すべての衝突後の小惑星の状態を見つけることになっています。 2つの小惑星が出会うと、小さい方の小惑星が爆発します。両方が同じサイズの場合、両方が爆発します。同じ方向に移動する2つの小惑星が出会うことはありません。 たとえば、関数への入力が-の場合 入力 const arr = [1, 7, 3, 6, 5, 6];