LeetCode Daily Question703。データストリームのK番目に大きい要素

703.データストリームのK番目に大きい要素

k大きな要素のクラス(クラス)を見つけるための最初のデータストリームの設計k主要な要素の順序付けの後、は最初のk異なる要素ではないことに注意してください

KthLargestカテゴリを実現してください

KthLargest(int k, int[] nums)整数kおよび整数フローnumsはオブジェクトを初期化します。挿入データストリーム、最初からのリターン電流が流れる大素子。
int add(int val)valnumsk

例:

输入:
["KthLargest", "add", "add", "add", "add", "add"]
[[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]
输出:
[null, 4, 5, 5, 8, 8]

解释:
KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]);
kthLargest.add(3);   // return 4
kthLargest.add(5);   // return 5
kthLargest.add(10);  // return 5
kthLargest.add(9);   // return 8
kthLargest.add(4);   // return 8

促す:

  • 1 <= k <= 104
  • 0 <= nums.length <= 104
  • -104 <= nums [i] <= 104
  • -104 <= val <= 104
  • addメソッドは最大104回呼び出すことができます
  • タイトルデータは、k番目に大きい要素を探すときに、配列に少なくともk個の要素があることを保証します。

方法1:優先キュー

問題解決のアイデア

アイデアは重要ではありません。明けましておめでとうございます。

参照コード

class KthLargest {
    
    
    private PriorityQueue<Integer> queue;
    private int k;

    public KthLargest(int k, int[] nums) {
    
    
        this.queue = new PriorityQueue<>();
        this.k = k;
        for (int val : nums) {
    
    
            add(val);
        }
    }

    public int add(int val) {
    
    
        queue.offer(val);
        if (queue.size() > k) {
    
    
            queue.poll();
        }
        return queue.peek();
    }
}

の結果
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_27007509/article/details/113791943