ストリームで703 K番目の最大の要素*

ストリームで703 K番目の最大の要素*

https://leetcode.com/problems/kth-largest-element-in-a-stream/

タイトル説明

見つけるためにクラスを設計し、Kストリームで最大の番目の要素を。それはソート順ではなく、k番目の個別要素におけるk番目の最大の要素であることに注意してください。

あなたのKthLargestクラスは、整数受け取るコンストラクタがありますkし、整数配列numsストリームから最初の要素が含まれ、。メソッドへの各呼び出しのためにKthLargest.add、ストリーム内のk番目の最大の要素を表す要素を返します。

例:

int k = 3;
int[] arr = [4,5,8,2];
KthLargest kthLargest = new KthLargest(3, arr);
kthLargest.add(3);   // returns 4
kthLargest.add(5);   // returns 5
kthLargest.add(10);  // returns 5
kthLargest.add(9);   // returns 8
kthLargest.add(4);   // returns 8

注:
あなたが取ることができるnums"長さを≥ k-1k ≥ 1

C ++の実装1

最小ヒープは、k番目のスタックのトップが最大数であるkの最大数を、保存します。

class KthLargest {
public:
    int size = 0;
    // 使用最小堆, 保证堆顶为第 k 个最大的数.
    priority_queue<int, vector<int>, std::greater<int>> q;
    KthLargest(int k, vector<int>& nums) {
        for (int i = 0; i < nums.size(); ++ i) {
            q.push(nums[i]);
            if (q.size() > k) q.pop();
        }
        size = k;
    }
    
    int add(int val) {
        q.push(val);
        if (q.size() > size) q.pop();
        return q.top();
    }
};
公開された455元の記事 ウォンの賞賛8 ビュー20000 +

おすすめ

転載: blog.csdn.net/Eric_1993/article/details/104859822