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

C++での入力と同じ順序で次に大きい要素


次に大きい要素は、その次の最初の大きい要素です。例を見てみましょう。

arr =[4、5、3、2、1]

4の次に大きい要素は5であり、要素3、2、1の次に大きい要素は-1です。これは、それらの後に大きい要素がないためです。

アルゴリズム

  • 乱数で配列を初期化します。

  • スタックとアレイを初期化します。

  • 配列の最後から繰り返します。

    • スタックが空になり、一番上の要素が現在の要素以下になるまで、要素をスタックから削除します。

    • スタックが空の場合、次に大きな要素はありません。したがって、結果の配列に-1を追加します。

    • スタックが空でない場合、一番上の要素は現在の要素の次に大きい要素です。結果の配列に追加します。

    • 現在の要素をスタックにプッシュします。

  • 結果の配列を繰り返し処理し、各要素を次に大きい要素と一緒に出力します。

実装

以下は、C++での上記のアルゴリズムの実装です

#include <bits/stdc++.h>
using namespace std;
void nextGreaterElements(int arr[], int n) {
   stack<int> s;
   int result[n];
   for (int i = n - 1; i >= 0; i--) {
      while (!s.empty() && s.top() <= arr[i]) {
         s.pop();
      }
      if (s.empty()) {
         result[i] = -1;
      }else {
         result[i] = s.top();
      }
      s.push(arr[i]);
   }
   for (int i = 0; i < n; i++) {
      cout << arr[i] << " -> " << result[i] << endl;
   }
}
int main() {
   int arr[] = { 1, 2, 3, 4, 5 };
   int n = 5;
   nextGreaterElements(arr, n);
   return 0;
}

出力

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

1 -> 2
2 -> 3
3 -> 4
4 -> 5
5 -> -1

  1. C++で同じ順序ですべての要素を含む最小のサブ配列を検索します

    サイズmとnの2つの配列があるとします。タスクは、最初の配列で最小長のサブ配列を見つけることです。これには、2番目の配列の場合はすべての要素が含まれます。 2番目の配列の要素は、大きな配列に連続していない場合がありますが、順序は同じである必要があります。したがって、2つの配列がA =[2、2、4、5、8、9]、B =[2、5、9]の場合、出力は5になります。Aの最小のサブ配列として、は[ 2、4、5、8、9]。ここでは、[2、5、9]のようなすべての要素が同じ順序になっています。したがって、サイズは5です。 これは、最初の要素が2番目の配列の最初の要素と一致することを確認することで解決できま

  2. C++の配列内のすべての要素に最も近い大きい値を検索します

    ここでは、配列内のすべての要素に最も近い大きい値を見つける方法を説明します。要素xに、それよりも大きい次の要素があり、配列にも存在する場合、それはその要素のより大きな値になります。要素が存在しない場合は、-1を返します。配列要素が[10、5、11、6、20、12]であるとすると、大きい方の要素は[11、6、12、10、-1、20]になります。 20は配列内でそれ以上の値を持たないため、-1を出力します。 これを解決するために、C++STLのセットを使用します。セットは、バイナリツリーアプローチを使用して実装されます。二分木では、常に順序の後続が次に大きい要素です。したがって、O(log n)