JavaScriptで配列内の隣接する2要素の最大積を求める方法【サンプルコード付き】
本記事では、正負を問わず数値が格納された配列を受け取り、隣接する2つの要素の積の中で最大の値を返すJavaScript関数の作成方法を解説します。
問題の概要
たとえば、次のような入力配列が与えられたとします。
const arr = [-23, 4, -3, 8, -12];
この場合、期待される出力は次のとおりです。
const output = -12;
積が最大となる2つの要素は「4」と「-3」で、その積は -12 になります。負の数同士や正と負の組み合わせがあるため、単純に大きい数字同士を掛けるだけでは正解を導けない点がポイントです。
解決策:サンプルコード
const arr = [-23, 4, -3, 8, -12];
const adjacentProduct = (arr = []) => {
let first = 0;
let second = 0;
let res = Number.MIN_SAFE_INTEGER;
for (let i = 0; i < arr.length; i++) {
first = arr[i];
second = arr[i + 1];
if (first * second > res) {
res = first * second;
};
};
return res;
};
console.log(adjacentProduct(arr));コードの解説
- 初期化:変数
resにはNumber.MIN_SAFE_INTEGER(JavaScriptで安全に扱える最小の整数)を設定します。これにより、どのような負の積と比較しても確実に更新されるようになります。 - ループ処理:
forループで配列を走査し、現在の要素firstとその隣の要素secondを取得して掛け合わせます。 - 最大値の更新:計算した積が
resより大きい場合のみ、resを新しい値で上書きします。 - 結果の返却:ループが完了すれば、
resには隣接要素ペアの中で最大の積が格納されているため、それを返します。
なお、ループの最後では最終要素と undefined を掛けることになりますが、undefined を掛けると NaN となり NaN > res は常に false と評価されるため、結果に影響はありません。
実行結果
このコードを実行すると、コンソールには次の出力が表示されます。
-12
このように、配列を一度走査するだけでO(n)の計算量で隣接要素の最大積を効率的に求められます。負の数を含む配列でも正しく動作するため、実務でも安心して使えるシンプルなアプローチです。
-
JavaScriptのreduce()メソッドで配列要素の積を求める方法
問題JavaScriptで、配列 arr を引数として受け取る関数を作成します。この関数は、配列内のすべての要素を掛け合わせた積を計算し、その結果を返す必要があります。解決策:reduce()メソッドを使う配列の全要素を集約して単一の値を得たい場合、Array.prototype.reduce() メソッドが最適です。reduce() は配列の各要素に対してコールバック関数を順に実行し、結果をアキュムレータ(累積値)に蓄えていきます。積を求める場合は、初期値として「1」を指定するのがポイントです。1は乗法における単位元のため、計算結果に影響を与えず、さらに空の配列が渡された場合でも正しく 1
-
JavaScriptで配列のネストされた集合の最長の長さを見つけて返す方法
問題数値の配列 arr を第一引数(かつ唯一の引数)として受け取るJavaScript関数を作成する必要があります。長さ N の配列 arr には、0 から N-1 までのすべての整数がちょうど1回ずつ含まれています。この関数では、次のルールに従って構成される集合 S の最長の長さを見つけ、その結果を返す必要があります。ここで、S[i] = {A[i], A[A[i]], A[A[A[i]]], ...} と定義されます。具体的には、S の最初の要素としてインデックス i の要素 A[i] を選択することから始め、次の要素は A[A[i]]、その次は A[A[A[i]]]… というように順に辿