JavaScript:隣接する要素の積の最大値を求めるアルゴリズム
整数の配列が与えられたとき、隣接する2つの要素の積が最大となるペアを見つけ、その積を返す必要があります。
例:
入力配列が次の場合:
const arr = [3, 6, -2, -5, 7, 3];
この場合、出力は 21 になります。これは、[7, 3] のペアの積(7 × 3 = 21)が最も大きいためです。
実装例
以下がそのコードです:
const arr = [3, 6, -2, -5, 7, 3];
const adjacentElementsProduct = (arr = []) => {
let prod, ind;
for (ind = 1; ind < arr.length; ind++) {
if (ind === 1 || arr[ind - 1] * arr[ind] > prod) {
prod = arr[ind - 1] * arr[ind];
};
};
return prod;
};
console.log(adjacentElementsProduct(arr));出力
コンソールには次のように出力されます:
21
コードの解説
このアルゴリズムの仕組みを簡単に説明します。
- 配列の2番目の要素(インデックス1)から順に走査を開始します。
- 各位置で、直前の要素
arr[ind - 1]と現在の要素arr[ind]の積を計算します。 - 計算した積がこれまでの最大値
prodより大きければ、prodを更新します。 - ループが終了した時点で、
prodには隣接要素の積の最大値が格納されています。
この方法は配列を一度だけ走査するため、計算量は O(n) と非常に効率的です。また、負の数を含む配列でも正しく動作します。例えば、負の数同士の隣接ペア(-2 と -5)の積は正の 10 になりますが、この例では [7, 3] の 21 が最大となるため、正しく 21 が返されます。
-
JavaScriptのreduce()メソッドで配列要素の積を求める方法
問題JavaScriptで、配列 arr を引数として受け取る関数を作成します。この関数は、配列内のすべての要素を掛け合わせた積を計算し、その結果を返す必要があります。解決策:reduce()メソッドを使う配列の全要素を集約して単一の値を得たい場合、Array.prototype.reduce() メソッドが最適です。reduce() は配列の各要素に対してコールバック関数を順に実行し、結果をアキュムレータ(累積値)に蓄えていきます。積を求める場合は、初期値として「1」を指定するのがポイントです。1は乗法における単位元のため、計算結果に影響を与えず、さらに空の配列が渡された場合でも正しく 1
-
【C++】行列内の隣接する4つの要素の最大積を求める方法
このチュートリアルでは、行列内の隣接する4つの要素の積の最大値を求めるC++プログラムについて解説します。 対象となるのは正方行列です。私たちのタスクは、縦・横・斜めのいずれかの方向に隣接する4つの要素を選び、その積が最大になる組み合わせを見つけることです。 アルゴリズムの考え方 基本的なアプローチは以下の通りです。 行列のすべての要素を順番に走査します。 各要素を起点として、「横方向」「縦方向」「右下がりの斜め方向」「左下がりの斜め方向」の4パターンについて、連続する4つの要素の積を計算します。 配列の範囲外を参照しないよう、インデックスの境界条件を確認した上で計算を行います。 計算した積