[LeetCode] LeeCode703. 数据流中的第K大元素
题目描述
思路:最小堆
好好领悟这个代码:
// 将nums数组所有元素插入小根堆中
for (int num : nums) {
heap.offer(num);
// 当小根堆的容量大于k时,就删除堆顶元素
if (heap.size() > k) heap.poll();
}
当heap.size() == k的时候,还是会再添加一个元素,此时堆内部会已经排好序,并且heap.size()此时为k+1,此时需要执行poll()操作,保证heap的大小为K。
方法一:
class KthLargest {
private PriorityQueue<Integer> heap;
private int k;
public KthLargest(int k, int[] nums) {
this.k = k;
this.heap = new PriorityQueue<>();
// 将nums数组所有元素插入小根堆中
for (int num : nums) {
heap.offer(num);
// 当小根堆的容量大于k时,就删除堆顶元素
if (heap.size() > k) heap.poll();
}
}
public int add(int val) {
heap.offer(val);
if (heap.size() > k) heap.poll();
return heap.peek();
}
}
/**
* Your KthLargest object will be instantiated and called as such:
* KthLargest obj = new KthLargest(k, nums);
* int param_1 = obj.add(val);
*/
本文作者:Ac_c0mpany丶
本文链接:https://www.cnblogs.com/keyongkang/p/17903830.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步