当前位置: 代码迷 >> 综合 >> 【LeetCode】703. Kth Largest Element in a Stream(Java)
  详细解决方案

【LeetCode】703. Kth Largest Element in a Stream(Java)

热度:29   发布时间:2023-12-06 07:10:33.0
题目描述:设计一个类来查找流中第k大的元素。注意,它是排序顺序中第k大的元素,而不是第k个不同的元素。

第k大的类将有一个接受整数k和整数数组nums的构造函数,整数数组nums包含来自流的初始元素。对于对方法kthmaximum的每次调用。添加,返回表示流中第k个最大元素的元素

Example:
在这里插入图片描述

/*** 返回数据流中第k大元素** @author wangfei*/
public class KthLargest {
    final PriorityQueue<Integer> q;final int k;/*** 1.利用优先队列创建元素个数为k的小顶堆* 2.遍历数组元素添加到优先队列中,前k个元素组成小顶堆,其余元素依次与堆顶元素比较,* 若堆顶元素小于该元素,则替换堆顶元素并重新排列为小顶堆直至遍历完所有元素* 3.返回的堆顶元素即为原数组中的第k大元素** @param k* @param nums*/public KthLargest(int k, int[] nums) {
    this.k = k;q = new PriorityQueue<>(k);for (int val : nums)add(val);}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();}
  相关解决方案