栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode 703. 数据流中的第 K 大元素

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 703. 数据流中的第 K 大元素

题目链接:

力扣https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/

【分析】维护一个有k个元素的最小堆,再来一个元素后,如果这个元素比堆顶大,就把堆顶弹出然后把这个元素压入堆中。

class KthLargest {

    PriorityQueue queue = new PriorityQueue<>();
    public KthLargest(int k, int[] nums) {
        int i, n = nums.length;
        for(i = 0; i < k; i++){
            queue.offer(Integer.MIN_VALUE);
        }
        for(i = 0; i < n; i++){
            add(nums[i]);
        }
    }

    public int add(int val) {
        if(queue.isEmpty()) queue.offer(val);
        else{
            if(val > queue.peek()){
                queue.poll();
                queue.offer(val);
            }
        }
        return queue.peek();
    }
}

【优化】其实可以不用一开始就加入k个最小值然后维护,可以在加入的时候,如果堆的大小大于k了就把堆顶弹出即可。

class KthLargest {

    PriorityQueue queue = new PriorityQueue<>();
    int k;

    public KthLargest(int k, int[] nums) {
        this.k = k;
        for(Integer it: nums){
            queue.offer(it);
        }
    }

    public int add(int val) {
        queue.offer(val);
        while(queue.size() > k){
            queue.poll();
        }
        return queue.peek();
    }
}

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782552.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号