C++で配列のピーク要素を見つける方法
このチュートリアルでは、与えられた配列の中からピーク要素を見つけるプログラムをC++で作成します。
ピーク要素とは、その両隣にある要素よりも大きい(または等しい)値を持つ要素のことです。それでは、問題を解くための手順を順番に見ていきましょう。
解決手順
ダミーデータで配列を初期化します。
最初の要素と最後の要素がピーク要素の条件を満たしているかどうかをチェックします。配列の端は隣接要素が1つしかないため、特別な扱いが必要です。
2番目の要素から配列を走査します。
現在の要素が、直前の要素と直後の要素の両方以上であるかを確認します。
上記の条件を満たした場合、その要素をピーク要素として返します。
結果を出力します。
サンプルコード
実際のコードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
int findPeakElement(int arr[], int n) {
if (n == 1) {
return arr[0];
}
if (arr[0] >= arr[1]) {
return arr[0];
}
if (arr[n - 1] >= arr[n - 2]) {
return arr[n - 1];
}
for (int i = 1; i < n - 1; i++) {
if (arr[i] >= arr[i - 1] && arr[i] >= arr[i + 1]) {
return arr[i];
}
}
return arr[0];
}
int main() {
int arr[] = { 1, 2, 5, 4, 7 };
cout << findPeakElement(arr, 5) << endl;
return 0;
}
実行結果
上記のコードを実行すると、以下の出力が得られます。
7
補足:計算量について
このアルゴリズムは配列を線形に走査するため、時間計算量は O(n) となります。また、追加のメモリを使用しないため、空間計算量は O(1) です。なお、配列がソート済みである場合など特定の条件下では、二分探索を用いることで O(log n) まで計算量を削減できる点にも注目しておきましょう。
まとめ
今回はC++を使って、配列からピーク要素を見つける方法を解説しました。境界要素の扱い方や隣接要素との比較ロジックは、配列操作の基本的なパターンなので、ぜひマスターしておいてください。
このチュートリアルについてご不明な点がある場合は、コメント欄でお気軽にお知らせください。
-
C++で三角形の周囲の長さ(外周)を求める方法
この記事では、三角形の周囲の長さ(外周)とは何か、三角形の種類ごとの周囲の長さの公式、そしてC++でそれらを求めるプログラムの書き方について詳しく解説します。周囲の長さ(Perimeter)とは周囲の長さとは、図形の外側を1周したときの総距離のことです。基本的には、図形を構成するすべての辺の長さを足し合わせたものになります。三角形の周囲の長さ三角形は3つの辺を持つ図形であるため、その周囲の長さは3辺の長さの合計として求められます。公式:周囲の長さ = すべての辺の合計周囲の長さ = x + y + z三角形の周囲の長さを求めるC++プログラムサンプルコード#include <iostre
-
Pythonで配列のピーク要素を見つける方法|二分探索による効率的な実装
配列の中からピーク要素(peak element)を探す問題について解説します。ピーク要素とは、両隣の要素よりも大きい要素のことです。入力配列 nums では nums[i] ≠ nums[i+1] が常に成り立つものとし、ピーク要素を1つ見つけてそのインデックスを返します。配列に複数のピーク要素が含まれる場合は、そのうちどれか1つのインデックスを返せば構いません。さらに、配列の範囲外は nums[-1] = nums[n] = −∞ とみなせるため、端の要素もピークになり得ます。 例えば、配列が [1, 2, 1, 3, 5, 6, 4] の場合、ピーク要素はインデックス 1(値 2)と