堆
每天学一点!
时刻保持对知识的热情!
展开
-
数据流中的中位数
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 思路 维护一个大根堆和小根堆。大小根堆元素个数差只允许小于等于1。 (1)当大根堆为空时,将...原创 2019-05-10 21:28:51 · 134 阅读 · 0 评论 -
215. 数组中的第K个最大元素
题目描述 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 思路 建立一个小根堆,然后这个小根堆的大小一直维持k即可。 代码 c...原创 2019-07-30 20:47:14 · 95 阅读 · 0 评论 -
最小的K个数
题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 思路1 维持一个大根堆,使堆中的元素始终保持为K。 C++STL中,priority默认是大根堆 小根堆定义:priority_queue< int ,vector<int>,greater<int >> q ...原创 2019-03-05 15:17:48 · 94 阅读 · 0 评论 -
leetcode703. 数据流中的第K大元素
题目描述 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 你的KthLargest类需要一个同时接收整数k 和整数数组nums的构造器,它包含数据流中的初始元素。每次调用KthLargest.add,返回当前数据流中第K大的元素。 示例 int k = 3; int[] arr = [4,5,8,2]; KthLarge...原创 2019-08-18 18:28:22 · 161 阅读 · 0 评论 -
leetcode1046. 最后一块石头的重量
题目描述 有一堆石头,每块石头的重量都是正整数。 每一回合,从中选出两块最重的石头,然后将它们一起粉碎。假设石头的重量分别为x 和y,且x <= y。那么粉碎的可能结果如下: 如果x == y,那么两块石头都会被完全粉碎; 如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。 最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩...原创 2019-08-18 19:55:46 · 98 阅读 · 0 评论