
堆与堆优化
文章平均质量分 74
oj
Ypuyu
Ypuyu
展开
-
[H堆] lc23. 合并K个升序链表(k路归并+堆优化+自定义排序+重载比较函数)
文章目录1. 题目来源2. 题目解析1. 题目来源链接:23. 合并K个升序链表2. 题目解析前导题[E链表] lc21. 合并两个有序链表(链表+二路归并+递归)k 路归并同二路归并一样。但是 k 路归并能处理的数据量更大。在本题中 k 个链表就拿 k 各指针分别指向头指针,每次比较 k 个指针的数值大小,取最小的一个即可。显然,可以拿堆来维护这个最小值,拿堆来维护这 k 个指针,取最小值是 O(1)O(1)O(1) 的,然后将最小值的下一个元素插入到堆中是 O(logk)O(logk)O原创 2020-12-18 10:06:17 · 222 阅读 · 0 评论 -
[M排序] lc692. 前K个高频单词(自定义排序+堆+top(k))
文章目录1. 题目来源2. 题目解析1. 题目来源链接:692. 前K个高频单词2. 题目解析STL 应用。自定义排序即可,也可以直接用 priority_queue<pair<string, int>> 堆来处理本题。时间复杂度:O(nlogn)O(nlogn)O(nlogn)空间复杂度:O(n)O(n)O(n)代码:class Solution {public: int kthLargestValue(vector<vector<int&g原创 2021-05-20 09:11:54 · 97 阅读 · 0 评论 -
[M数据结构] lc2353. 设计食物评分系统(数据结构+set 平衡树+懒删除堆)
这种 平衡树、优先队列的,暂时拿 go 还写不了,没有合适的板子用。就先拿 C++ 写吧,日后看看啥时候会补齐这个板子。原创 2025-03-01 21:51:16 · 572 阅读 · 0 评论 -
[堆排序+模板] 堆排序
文章目录0. 前言1. 堆排序0. 前言堆排序是一个不稳定的排序算法,对数据不敏感,时间复杂度稳定,主要分为两部分:建堆、堆排序。其中建堆的时间复杂度是 O(n)O(n)O(n) 的,而排序选出一个最大、最小值的过程是 O(logn)O(logn)O(logn) 的,一共需要 n 次操作,故总共的时间复杂度是 O(nlogn)O(nlogn)O(nlogn) 的。堆主要的两个操作,在此仅使用向下调整 down() 操作即可,至于另一个注意点就是堆排序的建堆时间复杂度计算了,和树的高度密切相关,通过原创 2020-10-22 14:29:03 · 684 阅读 · 0 评论 -
[堆+模板] 模拟堆模板
文章目录0. 前言1. 并查集+最裸版本0. 前言该并查集模板支持的操作:将两个集合合并询问两个元素是否在一个集合当中并查集两个优化:路径压缩:当一路找到根节点,会将这条路径上所有点都直接指向根节点。优化效果十分明显,使并查集接近 O(1)O(1)O(1) 的时间复杂度。按秩合并:优化效果不明显,一般用不到,该模板并没有包含。常见问题:树根判断:p[x] = x求 x 的集合编号:while(p[x] != x) x = p[x];,如果父节点不为根节点,那么将 x 更新为上级原创 2020-10-22 11:59:39 · 390 阅读 · 0 评论