堆
文章平均质量分 69
yuzhang_zy
现在的我不是最好的我,未来的我才是最好的我,每一篇博客都记录着我的成长
展开
-
703 数据流中的第 K 大元素(小根堆)
1. 问题描述:设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。请实现 KthLargest类:KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。示例:输入:["KthLargest", "add", "add", "add", "add", "add"][[3,.原创 2021-08-10 10:00:27 · 163 阅读 · 0 评论 -
658 找到 K 个最接近的元素(大根堆、二分查找)
1. 问题描述:给定一个排序好的数组arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。整数 a 比整数 b 更接近 x 需要满足:|a - x| < |b - x| 或者|a - x| == |b - x| 且 a < b示例 1:输入:arr = [1,2,3,4,5], k = 4, x = 3输出:[1,2,3,4]示例 2:输入:arr = [1,2,3,4,5], k = 4, x = -1.原创 2021-08-01 22:55:58 · 191 阅读 · 0 评论 -
502 IPO(贪心、大根堆维护元素最大值)
1. 问题描述:假设力扣(LeetCode)即将开始其 IPO。为了以更高的价格将股票卖给风险投资公司,力扣希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助力扣设计完成最多 k 个不同项目后得到最大总资本的方式。给定若干个项目。对于每个项目 i,它都有一个纯利润 Pi,并且需要最小的资本 Ci 来启动相应的项目。最初,你有 W 资本。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。总而言之,从给定项目中选择最多 k原创 2021-07-17 10:15:03 · 191 阅读 · 0 评论 -
python标准库--heapq堆队列算法
这个模块提供了堆队列算法的实现,也称为优先队列算法。这个模块最常用的是将一个列表转换为一个堆,默认是小根堆(它的每个父节点的值都只会小于或所有孩子节点(的值)),而且常用的主要有三个方法:①heapq.heappush(heap, item):将 item 的值加入 heap 中,保持堆的不变性② heapq.heappop(heap):弹出并返回 heap 的最小的元素,保持堆的不变性。如果堆为空,抛出 IndexError 。使用 heap[0] ,可以只访问最小的元素而不弹出它③ heapq.原创 2020-12-04 21:52:56 · 822 阅读 · 0 评论 -
355 设计推特(哈希表、大根堆存储信息)
1. 问题描述:设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文。你的设计需要支持以下的几个功能:postTweet(userId, tweetId): 创建一条新的推文 getNewsFeed(userId): 检索最近的十条推文。每个推文都必须是由此用户关注的人或者是用户自己发出的。推文必须按照时间顺序由最近的开始排序。 follow(followerId, followeeId): 关注一个用户 unfoll原创 2021-06-16 19:57:06 · 222 阅读 · 0 评论 -
313 超级丑数(多路归并思想,小根堆)
1. 问题描述:编写一段程序来查找第 n 个超级丑数。超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。示例:输入: n = 12, primes = [2,7,13,19]输出: 32解释: 给定长度为 4 的质数列表 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] 。说明:1是任何给定primes的超级丑数。给定primes中的数字以升序排列。0 ...原创 2021-06-03 22:53:25 · 158 阅读 · 0 评论 -
1046 最后一块石头的重量(模拟、大根堆)
1. 问题描述:有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块最重的石头,然后将它们一起粉碎。假设石头的重量分别为x 和y,且x <= y。那么粉碎的可能结果如下:最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回0。示例:输入:[2,7,4,1,8,1]输出:1解释:先选出 7 和 8,得到 1,所以数组转换为 [2,4,1,1,1],再选出 2 和 4,得到 2,所以数组转换为 [2,1,1,1],接着是 2 和 1,得到 1,所...原创 2020-12-09 21:26:26 · 213 阅读 · 1 评论 -
1054 距离相等的条形码(大根堆、字典)
1. 问题描述:在一个仓库里,有一排条形码,其中第 i 个条形码为barcodes[i]。请你重新排列这些条形码,使其中两个相邻的条形码不能相等。 你可以返回任何满足该要求的答案,此题保证存在答案。示例 1:输入:[1,1,1,2,2,2]输出:[2,1,2,1,2,1]示例 2:输入:[1,1,1,1,2,2,3,3]输出:[1,3,1,3,2,1,2,1]提示:1 <= barcodes.length <= 10000 1 <= barcodes[i.原创 2020-12-09 11:13:21 · 230 阅读 · 0 评论 -
767 重构字符串(大根堆--贪心)
1. 问题描述:给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。示例1:输入: S = "aab"输出: "aba"示例 2:输入: S = "aaab"输出: ""注意:S只包含小写字母并且长度在[1, 500]区间内。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reorganize-string2. 思路分析:一开始的时候没有..原创 2020-12-04 22:49:11 · 236 阅读 · 0 评论