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

C++に挿入するたびにK番目に小さい要素


このチュートリアルでは、 k-thを見つけます。 挿入するたびに最小の要素。

最小ヒープを使用して問題を解決します。プログラムを完了するための手順を見てみましょう。

  • ランダムデータでアレイを初期化します。
  • 優先キューを初期化します。
  • k-1まで、k番目はありません 最小の要素。だから、好きな記号を印刷してください。
  • k+1からnまで繰り返すループを作成します。
    • 最小ヒープのルートを印刷します。
    • 要素が最小ヒープのルートより大きい場合は、ルートをポップして要素を挿入します。

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

#include <bits/stdc++.h>
using namespace std;
void findKthSmallestElement(int elements[], int n, int k) {
   priority_queue<int, vector<int>, greater<int>> queue;
   for (int i= 0; i < k - 1; i++) {
      queue.push(elements[i]);
      cout << "- ";
   }
   queue.push(elements[k-1]);
   for (int i = k; i < n; i++) {
      cout << queue.top() << " ";
      if (elements[i] > queue.top()) {
         queue.pop();
         queue.push(elements[i]);
      }
   }
   cout << queue.top() << endl;
}
int main() {
   int arr[] = {3, 5, 6, 2, 7, 8, 2, 3, 5, 9};
   findKthSmallestElement(arr, 10, 5);
   return 0;
}

出力

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

- - - - 2 3 3 3 5 5

結論

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


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

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

  2. 配列を分割する方法でk番目に小さい要素を見つけるC++プログラム

    配列を分割する方法でk番目に小さい要素を見つけるC++プログラムを開発します。 アルゴリズム Begin    Function CreatePartition() has an array a, and the lower l and upper limit h as arguments    in := l and pi := h    for i in range l to h, do       if a[i] < a[pi], then