
堆
Betternw
这个作者很懒,什么都没留下…
展开
-
数据流的中位数
题目描述有一个源源不断的吐出整数的数据流,假设你有足够的空间来保存吐出的数。请设计一个名叫MedianHolder的结构,MedianHolder可以随时取得之前吐出所有数的中位数。[要求]如果MedianHolder已经保存了吐出的N个数,那么将一个新数加入到MedianHolder的过程,其时间复杂度是O(logN)。取得已经吐出的N个数整体的中位数的过程,时间复杂度为O(1)每行有一个整数opt表示操作类型若opt=1,则接下来有一个整数N表示将N加入到结构中。若opt=2,则表示询原创 2021-08-08 11:45:40 · 193 阅读 · 0 评论 -
179 最大数
题目描述给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:“210”示例 2:输入:nums = [3,30,34,5,9]输出:“9534330”代码public String largestNumber(int[] nums) { PriorityQueue<String> heap = new Priori原创 2021-08-07 19:52:02 · 145 阅读 · 0 评论 -
字符串出现次数的TopK问题
题目描述给定一个字符串数组,再给定整数k,请返回出现次数前k名的字符串和对应的次数。返回的答案应该按字符串出现频率由高到低排序。如果不同的字符串有相同出现频率,按字典序排序。对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。比如"ah1x"小于"ahb",“231”<”32“字符仅包含数字和字母实例一:输入:[“a”,“b”,“c”,“b”],2返回值:[[“b”,“2”],[“a”,“1”]]说明:"b"出现了2次,记[“b”,“2”原创 2021-08-01 16:08:18 · 455 阅读 · 0 评论 -
【堆 贪心】 502 IPO
题目资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 k 个不同项目后得到最大总资本的方式。给定若干个项目。对于每个项目 i,它都有一个纯利润 Pi,并且需要最小的资本 Ci 来启动相应的项目。最初,你有 W 资本。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。总而言之,从给定项目中选择最多 k 个不同项目的列表,以最大化最终资本,并输出最终可获得的最多资本。输入: k=2, W=0, Profits=[1,2,3], Capital=[0,1原创 2020-06-28 21:49:58 · 159 阅读 · 0 评论 -
【Top K 优先队列】 offer 40 最小的k个数
题目输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]思路建立小跟堆代码 public int[] getLeastNumbers(int[] arr, int k) { if(k==0) return new int[0]; //默认小顶堆 Queue<Integer>原创 2020-07-08 11:12:38 · 173 阅读 · 0 评论 -
【堆 优先队列】offer 59-1 滑动窗口的最大值
题目给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31 3 [-1 -3 5] 3 6 7 51 3 -1 [-3 5 3]原创 2020-07-12 20:15:11 · 140 阅读 · 0 评论 -
【哈希存储元素和个数,堆筛选次数,list存储再转换为数组】 347 前k个高频元素
题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]输入: nums = [1], k = 1输出: [1]思路建立哈希表,将元素和元素对应次数放入哈希表中。建立大顶堆,根据次数大小建立,入堆,当堆内元素多于k个时,弹出多于元素,堆内剩下的就是频率前k高的元素。代码public int[] topKFrequent(int[] nums, int k) { HashMap<Intege原创 2020-06-29 16:25:30 · 188 阅读 · 0 评论 -
【Top K 优先队列 建堆】 215 数组中的第k个最大的元素
题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。输入: [3,2,1,5,6,4] 和 k = 2输出: 5输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4思路建立大根堆,弹出k-1个元素,那么堆顶就是第k大的元素。或者建立小跟堆,弹出len-k个元素,堆顶就是第k大的元素代码public int findKthLargest(int[] nums, int k) { Prio原创 2020-06-26 17:56:50 · 347 阅读 · 1 评论 -
【堆 优先队列 分而治之】 23 合并k个有序链表
题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6思路优先级队列的原理是堆。如果不重写比较器,那么就将放入的元素按照升序排序并输出。此题重新定义比较器,将传入的值按照val值的大小进行排序。for循环将数组中每个链表的第一个节点放入队列中,并且会进行大小值的排序。p连接弹出的最小值原创 2020-06-20 10:36:30 · 197 阅读 · 0 评论