C++の配列における偶数インデックスと奇数インデックス要素の絶対差を求める方法
配列と絶対差とは
配列(Array)とは、同じデータ型の複数の要素をまとめて格納できるコンテナです。要素のインデックスは0から始まり、最初の要素がインデックス0に対応します。
本記事では、偶数インデックスの要素同士、および奇数インデックスの要素同士の絶対差を求める方法を解説します。
- 偶数インデックス:0, 2, 4, 6, 8 …
- 奇数インデックス:1, 3, 5, 7, 9 …
絶対差とは、2つの値の差の絶対値(|a − b|)のことです。たとえば、15と7の絶対差は |15 − 7| = 8 となります。
問題の例
入力:arr = {1, 2, 4, 5, 8}
出力:
偶数インデックス要素の絶対差 = 5
奇数インデックス要素の絶対差 = 3
解説
偶数インデックス(0, 2, 4)に位置する要素は「1, 4, 8」です。初期値0から順に差の絶対値を計算していきます。
- |0 − 1| = 1
- |1 − 4| = 3
- |3 − 8| = 5
よって、偶数インデックス要素の絶対差は 5 となります。
一方、奇数インデックス(1, 3)に位置する要素は「2, 5」です。
- |0 − 2| = 2
- |2 − 5| = 3
よって、奇数インデックス要素の絶対差は 3 となります。
C++による実装例
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = { 1, 5, 8, 10, 15, 26 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << "配列の要素:\n";
for (int i = 0; i < n; i++) {
cout << " " << arr[i];
}
int even = 0;
int odd = 0;
for (int i = 0; i < n; i++) {
if (i % 2 == 0)
even = abs(even - arr[i]);
else
odd = abs(odd - arr[i]);
}
cout << "\n偶数インデックスの絶対差:" << even << endl;
cout << "奇数インデックスの絶対差:" << odd << endl;
return 0;
}
実行結果
配列の要素: 1 5 8 10 15 26 偶数インデックスの絶対差:8 奇数インデックスの絶対差:21
アルゴリズムのポイント
このアプローチでは、変数 even と odd を0で初期化し、配列を先頭から一度だけ走査します。インデックスが偶数の場合は abs(even - arr[i]) を、奇数の場合は abs(odd - arr[i]) を順次代入していくだけで、目的の絶対差が求まります。
計算量も非常に効率的で、時間計算量は O(n)、追加で必要な空間計算量は O(1) で済みます。配列のサイズが大きくなっても安定した性能を発揮できるシンプルな手法です。
-
【C++】配列内の隣接する要素同士の絶対差を求める方法
この記事では、配列内の隣接する2つの要素のペアごとに絶対差(絶対値の差)を求める方法を解説します。配列に n 個の要素が含まれている場合、結果として得られる配列には n-1 個の要素が格納されます。例えば、配列の要素が {8, 5, 4, 3} である場合、計算結果は次のようになります。|8−5| = 3、|5−4| = 1、|4−3| = 1アルゴリズムpairDiff(arr, n)begin res := 結果を格納するための配列 for i in range 0 to n-2, do res[
-
C++のstd::vectorとstd::arrayの違いとは?特徴と使い分けを徹底解説
C++には、複数の値をまとめて管理できるコンテナとして std::vector と std::array が用意されています。一見似ていますが、内部構造や動作には重要な違いがあり、それぞれ得意な場面が異なります。この記事では、両者の主な違い、宣言と初期化の基本構文、そして実際に動作するサンプルコードを交えながら、わかりやすく解説します。 std::vectorとstd::arrayの主な違い 比較項目std::vectorstd::array サイズ動的(要素の追加で自動拡張)固定(宣言時に決定) メモリ消費やや多い少ない(効率的) 要素アクセス高速だが僅かなオーバーヘッドあり常に一定