【JavaScript】隣接する2つの要素の最大積を求める方法
問題
数値の配列を受け取るJavaScript関数を作成します。
この関数は、配列内の隣接する2つの要素を掛け合わせた積の中から、最大値を見つけて返す必要があります。
コード例
以下がその実装コードです。
const arr = [9, 5, 10, 2, 24, -1, -48];
function adjacentElementsProduct(array) {
let maxProduct = array[0] * array[1];
for (let i = 1; i < array.length; i++) {
product = array[i] * array[i + 1];
if (product > maxProduct)
maxProduct = product;
}
return maxProduct;
};
console.log(adjacentElementsProduct(arr));
出力結果
50
コードの解説
このコードの処理の流れは以下の通りです。
- 初期化: まず、配列の先頭2つの要素(9 × 5 = 45)の積を初期値として変数
maxProductに設定します。 - ループ処理:
forループで配列を順番に走査しながら、隣接する要素同士の積を計算します。 - 最大値の更新: 計算した積が現在の
maxProductより大きい場合、その値で上書き更新します。 - 結果の返却: ループ終了後、最も大きな積を返します。
今回の例では、配列 [9, 5, 10, 2, 24, -1, -48] の中で「5 × 10 = 50」が最大の積となるため、最終的に 50 が出力されます。
補足:ループ範囲について
上記のコードでは、ループの最後で array[i + 1] が未定義(undefined)になる可能性があります。ただし、undefined を掛けると NaN となり、NaN > maxProduct は常に false と評価されるため、結果には影響しません。より厳密に書く場合は、ループ条件を i < array.length - 1 とすると安全です。
-
【C++】循環配列で隣接しない要素を選んだときの最大合計を求める方法
問題の概要本記事では、循環配列 cirArr[] が与えられたとき、「どの2つの要素も隣接して選ばない」という条件を満たす要素の最大合計を求めるプログラムをC++で作成します。問題の詳細循環配列に対して、隣接する要素を同時に選ぶことができない、つまり要素を一つ飛ばしで選択した場合の最大合計を求める必要があります。循環配列とは、配列の末尾の要素が先頭の要素につながっている特殊な配列構造のことです。具体例で問題を確認しましょう。入力例cirArr[] = {4, 1, 5, 3, 2}出力例9解説最大の合計となる循環部分列は [4, 5, 2] で、その合計は 9 になります。解決アプローチこの問
-
Pythonで配列内の2つの異なる要素の最大積を求める方法
数値のリスト nums が与えられたとき、その中から2つの異なる要素を選んで掛け合わせた値の最大値(最大積)を求めたい場面はよくあります。例えば、入力が nums = [8, -3, 1, -5] の場合、出力は 15 となります。これは (-3) × (-5) = 15 となり、他のどの組み合わせよりも大きいためです。ポイント:負の数同士の積に注意この問題で重要なのは、負の数同士を掛けると正の数になるという性質です。そのため、最大の積は以下の2パターンのいずれかから生まれます。リスト内の最も大きい2つの要素の積リスト内の最も小さい(負の)2つの要素の積したがって、リストをソートして両端の組み