![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
堆
傅里叶不想变换_
这个作者很懒,什么都没留下…
展开
-
215. 数组中的第K个最大元素
思路:堆排序,大根堆用于升序,小根堆用于降序。注意循环次数,应该是 k - 1 次,比如 k = 2,那么应该删除 1 次class Solution { public int findKthLargest(int[] nums, int k) { int heapSize = nums.length; buildMaxHeap(nums, heapSize); for(int i = nums.length - 1; i > nums.le.原创 2021-06-24 11:32:43 · 72 阅读 · 0 评论 -
堆排序代码
class Solution { public int[] sortArray(int[] nums) { if(nums.length <= 1) return nums; heapSort(nums); return nums; } public void heapSort(int[] arr){ int heapSize = arr.length; // 建堆 build原创 2021-06-24 11:18:13 · 68 阅读 · 0 评论 -
347. 前 K 个高频元素
思路:使用最小堆维护一个元素数目为 k 的最小堆每次都将新的元素与堆顶元素(堆中频率最小的元素)进行比较如果新的元素的频率比堆顶端的元素大,则弹出堆顶端的元素,将新的元素添加进堆中最终,堆中的 k 个元素即为前 k 个高频元素注意:1.避免使用大根堆,因为需要把所有元素压入堆,复杂度是 nlogn,而且还浪费内存。如果是海量元素,那就挂了 2.对于 topk 问题:最大堆求topk小,最小堆求 topk 大class Solution { public int[] topKF.原创 2021-01-24 17:35:10 · 145 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数
思路:1.直接排序后取前k个值 2.用一个大根堆实时维护数组的前 k 小值。首先将前 k 个数插入大根堆中,随后从第 k+1个数开始遍历,如果当前遍历到的数比大根堆的堆顶的数要小,就把堆顶的数弹出,再插入当前遍历到的数。最后将大根堆里的数存入数组返回即可,注意,java默认是小根堆,实现大根堆需要重写一下比较器。 3.快排(待完善) public int[] getLeastNumbers(int[] arr, int k) { if (arr.length == 0.原创 2021-01-24 17:10:11 · 72 阅读 · 0 评论