Top K问题

1)将新加入的元素堆化
2)删除堆顶元素(即最小元素),剩下的k个元素就是TopK Elements 
//LeetCode-215 Kth Element (数组中第K个最大元素)
public int findKthLargest(int[] nums, int k) {
    PriorityQueue<Integer> pq = new PriorityQueue<>(); //小顶堆
    for (int val : nums) {
        pq.add(val);
        if (pq.size() > k)  //维护堆的大小为K
            pq.poll();
    }
    return pq.peek();
}
//TopK Elements 
private int[] topK(int[] nums, int k) {
    PriorityQueue<Integer> pq = new PriorityQueue<>(); //小顶堆
    for (int val : nums) {
        pq.add(val);
        if (pq.size() > k)  //维护堆的大小为K
            pq.poll();//删除最小的元素
    }
    //转化成数组
    int[] res = new int[k];
    for(int i = k-1;i>=0;i--){
        res[i] = pq.poll();
    }
    return res;
}