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

左右の部分配列の合計の積を求めるJavaScript関数

本記事では、長さN(Nは偶数)の数値配列を受け取り、その配列を左右2つの部分配列に分割して処理するJavaScript関数の実装方法を解説します。

問題の概要

要件は以下のとおりです。

  • 長さNの数値配列を受け取る(Nは偶数であること)
  • 配列を前半N/2個の要素からなる「左側」の部分配列と、後半N/2個の要素からなる「右側」の部分配列に分割する
  • それぞれの部分配列の要素の合計を求める
  • 両方の合計値を乗算した結果を返す

例えば、入力配列が次の場合を考えてみましょう。

const arr = [1, 2, 3, 4]

この場合、左側は [1, 2]、右側は [3, 4] となるため、出力は以下のようになります。

(1 + 2) * (3 + 4)
= 3 * 7
= 21

実装コード

以下が実際のコード例です。ここでは reduce() メソッドを使い、1回のループで左右の合計を同時に計算しています。

const arr = [1, 2, 3, 4]

const subArrayProduct = arr => {
   const { length: l } = arr;
   const creds = arr.reduce((acc, val, ind) => {
      let { left, right } = acc;
      if(ind < l/2){
         left += val;
      }else{
         right += val;
      }
      return { left, right };
   }, {
      left: 0,
      right: 0
   });
   return creds.left * creds.right;
};
console.log(subArrayProduct(arr));

コードのポイント

  • reduce() の初期値として { left: 0, right: 0 } を設定し、アキュムレータ内で両方の合計を管理します。
  • 現在のインデックス ind が配列長の半分未満であれば左側の合計に加算し、そうでなければ右側の合計に加算します。
  • 最後に creds.left * creds.right で両方の合計を乗算して返すことで、余分なループや中間配列を作らずに済みます。

出力結果

コンソールには次のように出力されます。

21
  1. JavaScriptで循環配列の最大部分配列和を求める方法

    問題JavaScriptで、整数の配列 arr を唯一の引数として受け取る関数を作成します。この配列 arr は循環配列として扱います。循環配列とは、配列の末尾の要素の後に先頭の要素が続く構造のことです。私たちのタスクは、arr の空でない部分配列の中から、要素の合計が最大となる値を見つけて返すことです。入出力の例入力:const arr = [2, -2, 3, -1];出力:const output = 4;出力の説明:この場合、最適な部分配列は [3, -1, 2] です。末尾の -1 の後に先頭の 2 が続くため、3 + (-1) + 2 = 4 となり、これが最大の合計値になります。

  2. JavaScriptで積がターゲット未満となる部分配列の個数を数える方法

    問題数値の配列 arr を第1引数に、数値 target を第2引数として受け取るJavaScript関数を作成する必要があります。この関数は、部分配列に含まれるすべての要素の積が target よりも小さくなる「連続した」部分配列の個数を数えて返すものです。たとえば、関数への入力が次の場合を考えてみましょう。入力const arr = [10, 5, 2, 6]; const target = 100;出力const output = 8;出力の説明積が100未満となる8つの部分配列は次のとおりです。[10], [5], [2], [6], [10, 5], [5, 2], [2, 6],