堆
Betternw
这个作者很懒,什么都没留下…
展开
-
数据流的中位数
题目描述 有一个源源不断的吐出整数的数据流,假设你有足够的空间来保存吐出的数。请设计一个名叫MedianHolder的结构,MedianHolder可以随时取得之前吐出所有数的中位数。 [要求] 如果MedianHolder已经保存了吐出的N个数,那么将一个新数加入到MedianHolder的过程,其时间复杂度是O(logN)。 取得已经吐出的N个数整体的中位数的过程,时间复杂度为O(1) 每行有一个整数opt表示操作类型 若opt=1,则接下来有一个整数N表示将N加入到结构中。 若opt=2,则表示询原创 2021-08-08 11:45:40 · 184 阅读 · 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 · 126 阅读 · 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 · 429 阅读 · 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 · 151 阅读 · 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 · 157 阅读 · 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 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7 5 1 3 -1 [-3 5 3]原创 2020-07-12 20:15:11 · 123 阅读 · 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 · 174 阅读 · 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 · 329 阅读 · 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 · 182 阅读 · 0 评论