JavaScriptで偶数番目と奇数番目の要素をそれぞれ合計し、その絶対差を返す方法
本記事では、数値の配列を受け取り、偶数番目(インデックスが偶数)の要素と奇数番目(インデックスが奇数)の要素をそれぞれ別々に合計し、最後にその差の絶対値を返すJavaScript関数の実装方法を解説します。
問題の概要
たとえば、次のような配列が与えられたとします。
const arr = [4, 6, 3, 1, 5, 8, 9, 3, 4];
この配列に対して、インデックス0・2・4・6・8にある要素(4 + 3 + 5 + 9 + 4 = 25)と、インデックス1・3・5・7にある要素(6 + 1 + 8 + 3 = 18)をそれぞれ合計します。そして、両者の差 |25 − 18| を計算し、結果として 7 を返します。
実装のアプローチ
実装の手順は以下の通りです。
・合計を格納するための変数(evenSum / oddSum)を2つ用意し、0で初期化する
・forループで配列の各要素を先頭から順に走査する
・現在のインデックス i が偶数かどうかを i % 2 === 0 で判定する
・偶数なら evenSum に加算し、奇数なら oddSum に加算する
・最後に Math.abs() を使って差の絶対値を返す
コード例
const arr = [4, 6, 3, 1, 5, 8, 9, 3, 4];
const oddEvenDifference = (arr = []) => {
let oddSum = 0;
let evenSum = 0;
for (let i = 0; i < arr.length; i++) {
const el = arr[i];
if (i % 2 === 0) {
evenSum += el;
} else {
oddSum += el;
}
}
return Math.abs(oddSum - evenSum);
};
console.log(oddEvenDifference(arr));出力結果
このコードをコンソールで実行すると、以下の出力が得られます。
7
ポイントの解説
ここで重要なのは、「偶数番目」「奇数番目」という言葉が要素の値ではなくインデックス(添字)の偶奇を指しているという点です。値自体が偶数か奇数かは判定に関係ありません。
また、どちらの合計が大きいか事前に分からないため、Math.abs() で絶対値を取ることで、常に正の値(または0)が返されるようになっています。この処理の時間計算量は O(n)、空間計算量は O(1) であり、配列を一度だけ走査する効率的な実装となっています。
-
C++で配列の偶数・奇数インデックス要素の絶対差を求める方法
この記事では、配列内の偶数インデックスと奇数インデックスにある要素の絶対差を求める方法を解説します。絶対差とは、2つの値の差が負になった場合にも絶対値を取ることを指します。 例として、配列 {1, 2, 3, 4, 5, 6, 7, 8, 9} を考えてみましょう。インデックスは0から始まるため、各要素は次のように分類されます。 偶数インデックス(0, 2, 4, 6, 8)の要素:1, 3, 5, 7, 9奇数インデックス(1, 3, 5, 7)の要素:2, 4, 6, 8 計算の手順 まず初期値0から出発し、該当するインデックスの要素を順番に見ながら、直前の累積値との差の絶対値を求めていき
-
Pythonで偶数番目と奇数番目のインデックス要素の合計を等しくするために削除できる要素の数を求めるプログラム
数値のリスト nums が与えられているとします。ここで関数 f(i) を考えます。この関数はインデックス i の要素を削除し、その結果のリストにおける偶数インデックスの値の合計と奇数インデックスの値の合計が等しいかどうかに応じて true または false を返します。求めたいのは、f が true を返すようなインデックスの個数です。例えば、入力が nums = [6, 8, 5, 2, 3] の場合、出力は 2 になります。なぜなら、8 を削除すると配列は [6, 5, 2, 3] となり、偶数インデックスと奇数インデックスの要素の合計はどちらも 8 で等しくなるからです。もう一つの解