返回数据流中第k大的元素(Java)

题目描述

        设计一个类来查找流中第k大的元素。注意,它是排序后第k大的元素,而不是第k个不同的元素。
        您的KthLargest类将有一个构造函数,它接受一个整数k和一个整数数组nums,后者包含来自流的初始元素。对于每个对方法kthmaximum的调用。添加,返回表示流中第k大元素的元素。
Examples:

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

解决

可以使用优先级队列,小顶堆,维护队列最大数量为k,每次add的时候,先判断队列是否已满,没满直接加入,满了就将要加入的数与堆顶的数(第k大的数)进行比较,没有堆顶大则不插入到堆中,比堆顶大先将堆顶元素弹出,如何插入该数,最后返回堆顶元素。
代码:

class KthLargest {
    public PriorityQueue<Integer> queue;
    public final int k;
    public KthLargest(int k, int[] nums) {
        queue = new PriorityQueue<>(k);
        this.k = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值