Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

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

  1. JavaScriptで配列の最小時間差を見つける

    問題 「時:分」形式で24時間制の時刻の配列を受け取るJavaScript関数を作成する必要があります。この関数は、配列内の任意の2つの時点間の最小分の差を見つける必要があります。 たとえば、関数への入力が-の場合 const arr = ["23:59","00:00"]; その場合、出力は-になります。 const output = 1; 時間の最小差は1分なので 例 以下はコードです- const arr = ["23:59","00:00"]; const findMinDifference =

  2. JavaScriptで配列の中央値インデックスを見つける

    問題 1次元空間内のさまざまな小惑星の位置を表す配列arrを取り込むJavaScript関数を作成する必要があります。 各小惑星について、絶対値はそのサイズを表し、符号はその方向を表します(正の意味は右、負の意味は左)。各小惑星は同じ速度で移動します。 私たちの機能は、すべての衝突後の小惑星の状態を見つけることになっています。 2つの小惑星が出会うと、小さい方の小惑星が爆発します。両方が同じサイズの場合、両方が爆発します。同じ方向に移動する2つの小惑星が出会うことはありません。 たとえば、関数への入力が-の場合 入力 const arr = [1, 7, 3, 6, 5, 6];