![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
优先队列(堆)
文章平均质量分 73
booooo丶
Try harder.
展开
-
703. 数据流中的第 K 大元素(优先队列:小根堆)
数据流中的第 K 大元素设计一个找到数据流中第 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”][[原创 2021-02-13 20:02:10 · 217 阅读 · 1 评论 -
1438. 绝对差不超过限制的最长连续子数组(优先队列和滑动窗口 或 TreeMap方法)
绝对差不超过限制的最长连续子数组给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。如果不存在满足条件的子数组,则返回 0 。示例 1:输入:nums = [8,2,4,7], limit = 4输出:2解释:所有子数组如下:[8] 最大绝对差 |8-8| = 0 <= 4.[8,2] 最大绝对差 |8-2| = 6 > 4.[8,2,4] 最大绝对差 |8-2| =原创 2021-02-21 16:41:59 · 252 阅读 · 0 评论 -
239. 滑动窗口最大值(优先队列和滑动窗口)
滑动窗口最大值给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:示例 2:输入:nums = [1], k = 1输出:[1]示例 3:输入:nums = [1,-1], k = 1输出:[1,-1]示例 4:输入:n原创 2021-02-22 14:52:27 · 611 阅读 · 0 评论 -
4. 寻找两个正序数组的中位数(优先队列 / (优化:归并排序))
寻找两个正序数组的中位数给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4]原创 2021-02-25 00:23:57 · 200 阅读 · 0 评论 -
215.数组中的第K个最大元素(优先队列:小根堆)
数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4解题思路优先队列(小根堆):始终放的是前 k 大的元素。(1) 首先遍历数组 nums,将数组中的元素依次添加到优先队列中(会自动成为一个小根堆)。(2) 每添加完一个元素后,都需原创 2021-02-25 15:48:23 · 342 阅读 · 0 评论