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