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

2Dアレイのピーク要素


アイテムは、その要素の4つの隣接要素すべて以上である場合、ピーク要素であると言われます。隣接する要素は、上、下、左、右の要素です。この問題については、いくつかの限界を検討します。対角要素は隣接要素としてチェックされません。マトリックス内に複数のピーク要素が存在する場合があり、ピーク要素は必ずしもマトリックス内で最大の要素であるとは限りません。

入力と出力

Input:
A matrix of different numbers.
10  8  10  10
14 13  12  11
15  9  11  11
15  9  11  21
16 17  19  20

Output:
The peak element of the matrix.
Here the peak element is: 21

アルゴリズム

findMaxMid(rows、mid、max)

入力: 行列の行番号、中央の行、出力引数としての最大要素。

出力: max要素のmaxアイテムとインデックスを更新します。

Begin
   maxIndex := 0
   for all rows r in the matrix, do
      if max < matrix[i, mid], then
         max = matrix[i, mid],
         maxIndex := r
   done
   return maxIndex
End
を実行します。

findPeakElement(rows、columns、mid)

入力- マトリックスの行と列、および中央の行の場所。

出力- マトリックスのピーク要素。

Begin
   maxMid := 0
   maxMidIndex := findMaxMid(rows, mid, maxMid)

   if mid is first or last column, then
      return maxMid

   if maxMid>= item of previous and next row for mid column, then
      return maxMid

   if maxMid is less than its left element, then
      res := findPeakElement(rows, columns, mid – mid/2)
      return res

   if maxMid is less than its right element, then
      res := findPeakElement(rows, columns, mid + mid/2)
      return res
End

#include<iostream>
#define M 4
#define N 4
using namespace std;

intarr[M][N] = {
   {10, 8, 10, 10},
   {14, 13, 12, 11},
   {15, 9, 11, 21},
   {16, 17, 19, 20}
};

intfindMaxMid(int rows, int mid, int&max) {
   intmaxIndex = 0;

   for (int i = 0; i < rows; i++) {    //find max element in the mid column
      if (max <arr[i][mid]) {
         max = arr[i][mid];
         maxIndex = i;
      }
   }
   return maxIndex;
}

intfindPeakElement(int rows, int columns, int mid) {
   intmaxMid = 0;
   intmaxMidIndex = findMaxMid(rows, mid, maxMid);

   if (mid == 0 || mid == columns-1)    //for first and last column, the maxMid is maximum
      return maxMid;
   // If maxMid is also peak
   if (maxMid>= arr[maxMidIndex][mid-1] &&maxMid>= arr[maxMidIndex][mid+1])
      return maxMid;

   if (maxMid<arr[maxMidIndex][mid-1])     // If maxMid is less than its left element
      return findPeakElement(rows, columns, mid - mid/2);
   return findPeakElement(rows, columns, mid+mid/2);
}

int main() {
   int row = 4, col = 4;
   cout<< "The peak element is: "<<findPeakElement(row, col, col/2);
}

出力

The peak element is: 21

  1. C++の多数決要素

    7/2と表示されます。 配列内のxの出現を数えることができ、その数がn / 2より大きい場合、答えはtrueになり、そうでない場合はfalseになります。 例(C ++) #include <iostream> #include <stack> using namespace std; bool isMajorityElement(int arr[], int n, int x){    int freq = 0;    for(int i = 0; i<n; i++){       if(a

  2. Pythonでピーク要素を見つける

    配列内のピーク要素を見つける必要があるとします。ピーク要素は、隣接する要素よりも大きい要素です。入力配列numsがあり、nums[i]≠nums[i + 1]であるとすると、ピーク要素を検索してそのインデックスを返します。配列は複数のピーク要素を保持できます。その場合、インデックスはピーク要素のいずれかに返されます。 nums [-1] =nums[n]=-∞と想像できます。したがって、配列が[1,2,1,3,5,6,4]のような場合、ピーク要素は1または5である必要があります。 これを解決するには、次の手順に従います- low:=0およびhigh:=配列の最後のインデックス、n:=配列