堆,一种非常重要的数据结构。能实现数据的自动排序,而且排序时间复杂度为O(nlogn),在n达到10^4时,O(n2)级算法就容易超时,但堆排序不会。堆可调用STL系统函数,简化代码,容易书写。一般情况,如果堆元素为数、字符、字符串都可有用默认的排序规则。如果元素是pair类型,其比较大小的方式为先 ...
分类:
其他好文 时间:
2020-04-26 01:37:44
阅读次数:
78
2020-04-25 18:19:22 问题描述: 给定一个长度为n的数组a,它有n * (n + 1) / 2个子数组。请计算这些子数组的和,然后按照升序排列,并返回排序后第k个数。 样例 Example1 Input: [2,3,1,4] 6 Output:5 Explanation: 我们可以 ...
分类:
编程语言 时间:
2020-04-25 19:13:36
阅读次数:
60
#include <iostream> #include <queue> #include <cstdio> using namespace std; int C; int cmp(const char a[], const char b[])//比较字符串大小的函数 { for (int i = ...
分类:
编程语言 时间:
2020-04-24 23:22:35
阅读次数:
361
题目找链接。 题意: 非常清晰的题意,就不再多说了。 分析: 看到这一题,其实思路一下子就有了,先从最暴力的开始吧:我们每次找一个最大拆开,然后别的都加上,也就是直接模拟,首先,这样的正确性是没问题的,但是时间不行,所以我们,要想别的办法,只招最大,大家应该很容易想到优先队列,用优先队列直接模拟的复 ...
分类:
其他好文 时间:
2020-04-16 19:44:04
阅读次数:
71
1,定义及简述 对于这个模板类priority_queue,它是STL所提供的一个非常有效的容器。 作为队列的一个延伸,优先队列包含在头文件 <queue> 中。 优先队列时一种比较重要的数据结构,它是有二项队列编写而成的,可以以O(log n) 的效率查找一个队列中的最大值或者最小值,其中是最大值 ...
分类:
编程语言 时间:
2020-04-12 23:01:21
阅读次数:
119
环形队列优先队列 二叉树两种存储方式:链表,数组 二叉查找树:左子树比根节点大,右子树比根节点小二叉树自平衡 遍历深度优先遍历(前序,中序,后序)(递归实现,或者是栈,能用递归的都可以用栈)广度优先遍历(层序遍历)(用队列实现) 二叉堆:要求根节点比左右节点大,是一种特殊的完全二叉树,用数组存储最大 ...
分类:
其他好文 时间:
2020-04-11 23:31:37
阅读次数:
81
TopK 问题 少量数据,可以全部读入内存 LeetCode原题,两种方法: 1. 优先队列(堆排序) 2. QuickSelect 大量数据,无法全部读入内存 50 GB 数据,CPU 2 核,512 MB 内存 使用堆排序,内存中只需要常驻当前TopK,读取数据时只读取一个数据分组,比如 100 ...
分类:
其他好文 时间:
2020-04-08 11:54:51
阅读次数:
58
最小生成树两连 并查集优化的克鲁斯卡尔算法和优先队列+链式前向星优化的普利姆算法 Kruskal Kruskal是常用的最小生成树算法,算法利用贪心思想,每次选择没用过且不构成环的边的最小边,直到选择了n 1条边,通常我们用并查集这个数据结构去优化,优化后的Kruskal算法复杂度是$O(mlogm ...
分类:
其他好文 时间:
2020-04-07 12:27:31
阅读次数:
86
什么是优先队列? 我们在常见的线性结构中,已经知道什么是普通队列了,普通队列就是一种“先进先出,后进后出”的数据结构,即普通队列的出队顺序和入队顺序是一样的,但我们的优先队列,它的出队顺序和入队顺序无关,它的出队顺序是和优先级相关的,当然这个优先级我们可以自己定义。 为什么使用优先队列? 举一个生活 ...
分类:
其他好文 时间:
2020-04-06 09:38:48
阅读次数:
63
转自https://www.cnblogs.com/henry-1202/p/9307927.html 浅析基础数据结构-二叉堆 目录 1.插入 2.删除 3.查询 1.堆排序 2.用两个堆来维护一些查询第k小/大的操作 中位数 3.利用堆来维护可以“反悔的贪心” 如题,二叉堆是一种基础数据结构 事 ...
分类:
其他好文 时间:
2020-03-29 18:14:08
阅读次数:
73