C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の2D配列でピーク要素を検索します


このチュートリアルでは、2D配列のピーク要素を見つけるプログラムを作成します。

要素の周囲のすべての要素が要素よりも小さい場合、その要素はピーク要素と呼ばれます。

問題を解決するための手順を見てみましょう。

  • ダミーデータを使用して2Dアレイを初期化します。

  • 2Dアレイを繰り返し処理します。

    • まず、2D配列のコーナー要素を確認します。

    • 次に、2D配列の最初と最後の行の条件を記述します。

    • 次に、2Dアレイの最初と最後の列を確認します。

    • そして最後に、真ん中の要素を確認します。

    • いずれの場合も、現在の要素をその周囲の要素と比較する必要があります。上記の条件により異なります。

    • 結果が見つかった場所に値を返します。

コードを見てみましょう。

#include <bits/stdc++.h>
using namespace std;
const int MAX = 256;
int findPeakElement(int arr[][MAX], int rows, int columns) {
   for (int i = 0; i < rows; i++) {
      for (int j = 0; j < columns; j++) {
         if (i == 0 && j == 0) {
            if (arr[i][j] > arr[i + 1][j] && arr[i][j] > arr[i][j + 1]) {
               return arr[i][j];
            }
         }
         else if (i == 0 && j == columns - 1) {
            if (arr[i][j] > arr[i + 1][j] && arr[i][j] > arr[i][j - 1]) {
               return arr[i][j];
            }
         }
         else if (i == rows - 1 && j == 0) {
            if (arr[i][j] > arr[i - 1][j] && arr[i][j] > arr[i][j + 1]) {
               return arr[i][j];
            }
         }
         else if (i == rows - 1 && j == columns - 1) {
            if (arr[i][j] > arr[i - 1][j] && arr[i][j] > arr[i][j - 1]) {
               return arr[i][j];
            }
         }
         else if (i == 0) {
            if (arr[i][j] > arr[i][j - 1] && arr[i][j] > arr[i][j + 1] && arr[i][j] > arr[i + 1][j]) {
               return arr[i][j];
            }
         }
         else if (i == rows - 1) {
            if (arr[i][j] > arr[i][j - 1] && arr[i][j] > arr[i][j + 1] && arr[i][j] > arr[i - 1][j]) {
               return arr[i][j];
            }
         }
         else if (j == 0) {
            if (arr[i][j] > arr[i - 1][j] && arr[i][j] > arr[i + 1][j] && arr[i][j] > arr[i][j + 1]) {
               return arr[i][j];
            }
         }
         else if (j == columns - 1) {
            if (arr[i][j] > arr[i - 1][j] && arr[i][j] > arr[i + 1][j] && arr[i][j] > arr[i][j - 1]) {
               return arr[i][j];
            }
         }
         else {
            if (arr[i][j] > arr[i][j - 1] && arr[i][j] > arr[i][j + 1] && arr[i][j] > arr[i - 1][j] && arr[i][j] > arr[i + 1][j]) {
               return arr[i][j];
            }
         }
      }
   }
   return -1;
}
int main() {
   int arr[][MAX] = {
      { 1, 2, 3, 4 },
      { 2, 3, 4, 5 },
      { 1, 3, 7, 5 },
      { 1, 2, 6, 6 } };
   int rows = 4, columns = 4;
   cout << findPeakElement(arr, rows, columns) << endl;
   return 0;
}

出力

上記のコードを実行すると、次の結果が得られます。

7

結論

チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。


  1. 二分探索アプローチを使用して配列のピーク要素を見つけるC++プログラム

    このC++プログラムでは、バイナリ検索アプローチを使用して、配列のピークの1つを見つけることができます。このアルゴリズムは、アルゴリズムの時間計算量がO(log(n))である結果として見つかった最初のピークを返します。 アルゴリズム Begin    PeakElement() function has ‘arr’ the array of data, start and end index in the argument list.    Assign the mid of subpart of the array.  

  2. 配列の最大要素を見つけるためのC++プログラム

    配列には複数の要素が含まれており、配列内の最大の要素は他の要素よりも大きい要素です。 たとえば。 5 1 7 2 4 上記の配列では、7が最大の要素であり、インデックス2にあります。 配列の最大の要素を見つけるプログラムは次のとおりです。 例 #include <iostream> using namespace std; int main() {    int a[] = {4, 9, 1, 3, 8};    int largest, i, pos;    largest = a[0