leecode 703. 數據流中的第K大元素

設計一個找到數據流中第K大元素的類(class)。注意是排序後的第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-1 且k ≥ 1。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/kth-largest-element-in-a-stream
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

class KthLargest {
    
    final PriorityQueue<Integer> q ;
    final int k;

    public KthLargest(int k, int[] nums) {
        this.k = k;
        this.q = new PriorityQueue<Integer>(k);
        for (int n : nums ){
            add(n);
        }
    }
    
    public int add(int val) {
        if (q.size () < k){
            q.offer (val);
        }else if (q.peek ()<val){
            q.poll ();
            q.offer (val);
        }
        return q.peek ();
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章