703. Kth Largest Element in a Stream/215. Kth Largest Element in an Array/

Posted keepac

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了703. Kth Largest Element in a Stream/215. Kth Largest Element in an Array/相关的知识,希望对你有一定的参考价值。

703 非常经典的一个题,假设有一个不断增加的序列,要求输出第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


举例: 假设有10000000个元素,假设求第5大的元素, 就是构建一个 size =5 的 “最小堆”,然后每次add 时都只add 比当前 堆里peek 大的值, 这样当PQ 填满时的peek 就是第5大的。
class KthLargest {
    
    Queue<Integer> pq ;
    int max_size;

    public KthLargest(int k, int[] nums) {
        
        pq = new PriorityQueue<>(k);
        max_size = k;
        for(int num: nums){
            this.add(num);  //调用成员函数的add 
        }
    }
    
    public int add(int val) {
        if(pq.size() <max_size) pq.offer(val);
        
        else if(val >pq.peek()) {
           pq.offer(val);
           pq.poll(); 
        }
        
        return pq.peek();
    }
}

215 太简单了,就不说了。

class Solution {
    public int findKthLargest(int[] nums, int k) {
        
        Queue<Integer> max_heap = new PriorityQueue<>((o1,o2)->o2-o1);
        
        for(int num: nums){
            max_heap.add(num);
        }
        
        for(int i=1; i<k; i++){
            max_heap.poll();
        }
        return max_heap.peek();
        
    }
}

 




以上是关于703. Kth Largest Element in a Stream/215. Kth Largest Element in an Array/的主要内容,如果未能解决你的问题,请参考以下文章

703. Kth Largest Element in a Stream

703. Kth Largest Element in a Stream

Leetcode 703题数据流中的第K大元素(Kth Largest Element in a Stream)Java语言求解

leetcode Kth Largest Element in a Stream——要熟悉heapq使用

LeetCode算法题-Kth Largest Element in a Stream(Java实现)

Kth Largest Element