zoukankan      html  css  js  c++  java
  • [编程题] lc 703. 数据流中的第K大元素

    [编程题] lc:703. 数据流中的第K大元素

    题目描述

    image-20200724161252056

    输入输出

    image-20200724161305523

    思路

    使用一个小顶堆,我们始终让小顶堆自平衡的调整保存需要的前k大小的元素,(堆顶元素最小,也就是这组数组的第k)。在我们添加一个元素进来的时候,只需要和堆顶元素比较,如果要添加的val比堆顶元素都小的话,就丢弃,如果比堆顶元素大的话,就去掉堆顶元素,添加该元素到堆中自平衡后返回堆顶就是我们要的第K大的数。

    Java代码

    class KthLargest {
        //小顶堆实现
        PriorityQueue<Integer> priorityQueue;
        int k;
        public KthLargest(int k, int[] nums) {
            this.k = k;
            priorityQueue = new PriorityQueue<>(k);
            //把数组中的元素存入堆中
            for(int num:nums){
                this.add(num);  //这里调用加入小顶堆的方法选出前3的元素在堆中
            }
        }
        
        public int add(int val) {
            if(priorityQueue.size()<k){
                priorityQueue.offer(val);
    
            }else if(priorityQueue.peek()<val){ //队满的情况下就看小顶堆的堆顶元素是是否需要移除
                priorityQueue.poll();
                priorityQueue.offer(val);
            }
            //返回小顶堆的堆顶级第三大的元素
            return priorityQueue.peek();   
       }
    }
    
    /**
     * Your KthLargest object will be instantiated and called as such:
     * KthLargest obj = new KthLargest(k, nums);
     * int param_1 = obj.add(val);
     */
    

    输出

    image-20200724161603908

    时间复杂度

    O(N*logn)

  • 相关阅读:
    Oracle11g字典表
    python操作excel
    Linux基础
    Mysql的DML基本操作
    Mysq基本操作--DDL
    上传验证码
    验证码
    添加图像
    用cmd 添加 修改 删除数据库
    cmd命令提示符命令
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13372591.html
Copyright © 2011-2022 走看看