703. 数据流中的第k大元素

优先队列

import java.util.PriorityQueue;

class KthLargest {

    /**
     * 使用优先队列创建最小堆,最多存放三个元素
     * 每次添加新元素时和堆顶元素进行比较,堆顶元素就一直是第k大的元素
     */
    PriorityQueue<Integer> pq = new PriorityQueue();
    int k;

    public KthLargest(int k, int[] nums) {

        this.k = k;

        for (int i = 0; i < nums.length; i++) {
            add(nums[i]);
        }
    }

    public int add(int val) {

        if (pq.size() < k){
            pq.add(val);
        }
        else {
            if (val > pq.peek()){

                pq.poll();
                pq.add(val);
            }
        }

        return pq.peek();
    }
}

/**
 * 时间复杂度 O(nlogk)
 * 空间复杂度 O(n)
 */

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

posted @ 2021-11-01 16:42  振袖秋枫问红叶  阅读(40)  评论(0)    收藏  举报