左边大顶堆,右边小顶堆。右边数量比左边多一,左边放小的那半数,右边放大的那半 是偶数个,那就返回两个根堆的头结点的q平均值,如果是奇数,就是小根堆的数量大于大根堆数量1个,返回小根堆的头; 当左右平等数量的时候,往小根堆了加入,当小根堆大于大根堆时候,往大根堆里加入 1 priority_queue ...
分类:
其他好文 时间:
2020-05-30 21:36:43
阅读次数:
83
题目:在一个大文件中有10G个整数,乱序排列,要求找出中位数(内存有2G限制,不能一次全部加装),请写出算法设计思路。 中位数的定义:对于一个排序好的序列,如果数据有奇数个的话,中位数就取中间的一个;如果有偶数个的话,中位数一般取中间两个数的平均值。 解题: 思路一:堆排序(转换为求前5G大的元素) ...
分类:
其他好文 时间:
2020-05-29 17:33:39
阅读次数:
108
由于之前失误 在堆排序中没有列出堆的实现 现在补上 public class MaxHeap { /** 所谓大顶堆 就是每个树的父节点都比其左右子节点大 */ /** * 堆 */ private int[] heap; /** * 界限 */ private final int limit; / ...
分类:
编程语言 时间:
2020-05-26 12:12:54
阅读次数:
73
什么是堆 堆是一个近似 完全二叉树 的结构, 并同时满足 堆积的性质 :即子结点的键值或索引总是小于(或者大于)它的父节点。 什么是堆排序 堆排序 (英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。 实现大顶堆 首先我们需要找到所有的非叶子结点,通过完全二叉树的性质我们知道 若父 ...
分类:
编程语言 时间:
2020-05-23 18:40:01
阅读次数:
65
什么是堆 堆 首先是一个完全二叉树, 堆 分为 大顶堆 和 小顶堆 ; 大顶堆 : 每个节点的值大于或等于其左右孩子节点的值,称为大顶堆。 小顶堆 同理就是每个节点的值小于或等于其左右孩子节点的值。 注意 : 每个节点的左右孩子节点的大小关系并没有限定。 大顶堆举例 如图: 首先其为一个完全二叉树, ...
分类:
编程语言 时间:
2020-05-19 18:10:55
阅读次数:
74
堆排序(升序为例) 思路: 1. 首先要建一个大顶堆 2. 交换堆顶元素与最后一个元素,堆的size 1 3. 重复第二步,直至堆中只有元素一个 \ 最好、最坏、平均时间复杂度:O(nlogn) \ 空间复杂度: O(1) \ 稳定性: 不稳定 ...
分类:
编程语言 时间:
2020-05-10 19:07:12
阅读次数:
68
题目: 解答: 优先队列,根据字母数量进行排序。 (1)记录每个字母在字符串中的数量(哈希表); (2)根据字母数量降序排序(插入优先队列,以字母数量较大优先级较高,类似于大顶堆) (3)若队列顶部字母的数量大于一半则无法构造,直接返回空字符串(奇偶有别) (4)按照字母数量降序顺序,当队列不空时, ...
分类:
其他好文 时间:
2020-05-04 13:23:15
阅读次数:
62
题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 代码: 1.普通人的大顶堆解法 class Solution { public: vector<int> GetLeastNumbers_Solution(vecto ...
分类:
其他好文 时间:
2020-04-19 12:51:54
阅读次数:
53
概念 分为大顶堆和小顶堆,是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以用到上一次的排序结果,所以不像其他一般的排序方法一样,每次都要进行n-1次的比较,复杂度为O(nlogn)。 完全 ...
分类:
编程语言 时间:
2020-04-14 12:16:52
阅读次数:
82
稳定性的定义与意义: 通俗地讲就是能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。 如果是不稳定排序,则需要第二次排序,会增加系统开销。 选择排序: 举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏 ...
分类:
编程语言 时间:
2020-04-09 12:59:31
阅读次数:
136