首页 > 其他分享 >[LeetCode] LeeCode703. 数据流中的第K大元素

[LeetCode] LeeCode703. 数据流中的第K大元素

时间:2023-12-15 17:37:25浏览次数:31  
标签:LeeCode703 元素 nums int KthLargest heap 数据流 LeetCode size

题目描述

思路:最小堆

好好领悟这个代码:

// 将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);
 */

标签:LeeCode703,元素,nums,int,KthLargest,heap,数据流,LeetCode,size
From: https://www.cnblogs.com/keyongkang/p/17903830.html

相关文章

  • 代码随想录算法训练营第二天| LeetCode977.有序数组的平方、209.长度最小的子数组、59
    LeetCode977.有序数组的平方●今日学习的文章链接和视频链接代码随想录(programmercarl.com) 题目链接977.有序数组的平方-力扣(LeetCode) ●自己看到题目的第一想法昨天正好做了这道题目,总体来说就是用双指针法,要么从绝对值最小的数开始排序,要么从绝对值最大的数开......
  • leetcode 209. 长度最小的子数组
    题目:209.长度最小的子数组题目描述:给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的连续子数组[numsl,numsl+1,...,numsr-1,numsr],并返回其长度。如果不存在符合条件的子数组,返回0。我的思路:这道题目暴力......
  • 代码随想录算法训练营第一天| LeetCode704 二分查找、27移除元素
     Leetcode704:二分查找今日学习的文章链接:代码随想录(programmercarl.com) 题目链接:704.二分查找-力扣(LeetCode)●  自己看到题目的第一想法这题我会,但是还没明白卡尔说的循环不变量是什么意思。我的固定思路就是,target比中间值大,左指针右移到mid+1;target比中间值......
  • [LeetCode] LeetCode92. 反转链表II
    题目描述思路:同LeetCode25.K个一组翻转链表因为涉及到可能链表的头节点会改变,所以设置dummy节点先走left-1步到达left的左边一个节点查看后面是否存在right-left+1个节点先翻转内部节点指向right-left次再翻转外部节点方法一:/***Definitionforsingly-lin......
  • 【leetcode 239. 滑动窗口最大值】Java优先队列——PriorityQueue类
    leetcode239.滑动窗口最大值题目描述:1e5大小的nums[]数组中长度为k(1<=k<=1e5)的窗口的最大值题解:暴力求解O(n^2)会超时,需要O(nlogn)的解法使用大根堆优先队列维护窗口元素,每次取最大值复杂度降为O(1),堆结构维护复杂度O(logn)问:如果维护窗口[l,r]前[0,l-1]的元素不影......
  • Leetcode刷题day12-二叉树.前中后序遍历
    递归法实现前.中.后序遍历代码随想录(programmercarl.com)解题思路前序遍历:头->左->右中序遍历:左->头->右后序遍历:左->右->头递归法实现流程:1.定义递归函数;2.寻找递归终止条件;3.设计单层递归模块classSolution(): def__init__(self,val=0,left=None,right=None): sel......
  • Leetcode刷题day11-栈.滑窗最大值.出现次数前K的元素
    239.滑动窗口最大值239.滑动窗口最大值-力扣(LeetCode)给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。示例1:输入:nums=[1,3,......
  • #yyds干货盘点# LeetCode程序员面试金典:两整数之和
    题目给你两个整数a和b,不使用运算符+和-,计算并返回两整数之和。 示例1:输入:a=1,b=2输出:3示例2:输入:a=2,b=3输出:5代码实现classSolution{publicintgetSum(inta,intb){while(b!=0){intcarry=(a&b)<<1;......
  • [LeetCode Hot 100] LeetCode24. 两两交换链表中的节点
    题目描述思路:创建dummy节点,令dummy.next=head。令cur表示当前到达的节点,初始时cur=dummy。每次需要交换cur后面的两个节点。如果cur的后面没有节点或者只有一个节点,则没有更多的节点需要交换,因此结束交换。否则,获得cur后面的两个节点node1和node2,通过更新节点的指针关系......
  • [LeetCode Hot 100] LeetCode148. 排序链表
    题目描述思路一:堆排序、小顶堆定义一个最小堆将链表的所有节点放入一个最小堆中直接用队列弹出的最小值依次覆盖掉原链表的值方法一:/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}......