简单介绍 最小堆:最小堆是一个关键码序列{K1,K2,…,Kn},它具有如下特性: K[i] a; 插入队尾:a.push(x); 删除队首:a.pop(); 查询队首:a.top(); 清空只能慢慢pop。 例题:序列合并 详细解释看题解: "传送门" 分析 固定 A[i], 每 n 个和都是有序 ...
分类:
其他好文 时间:
2020-01-30 12:28:27
阅读次数:
91
优先级队列的底层实现是堆(最大堆、最小堆) 堆的特点 1. 完全二叉树 2. 每个节点的值都必须大于等于或小于等于子树中节点的值(对应最大堆、最小堆) 3. 往堆中插入和删除一个元素的时间复杂度都是O(logn) 一、实现 最大堆和最小堆实现原理基本一样,下面实现一个最大堆 输出 二、堆排序 1.每 ...
分类:
其他好文 时间:
2020-01-07 14:44:07
阅读次数:
81
堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法。因此,学习堆排序之前,有必要了解堆! 我们知道,堆分为"最大堆"和"最小堆"。最大堆通常被用来进行"升序"排序,而最小堆通常被用来进行"降序"排序。鉴于最大堆和最小堆是对称关系,理解其中一种即可。本文将对最大堆实现的升序排序进行 ...
分类:
编程语言 时间:
2020-01-04 22:29:55
阅读次数:
93
using System; /// <summary> /// 最小堆 /// </summary> class MinHeap<T> where T : IComparable { private T[] container; // 存放堆元素的容器 private int capacity; / ...
序言 二叉堆本质上是一种完全二叉树, 它分为两个类型。 1. 最大堆 2. 最小堆 最大堆 什么是最大堆呢? 最大堆的任何一个父节点的值, 都大于或等于它左、 右孩子节点的值。 最小堆 什么是最小堆呢? 最小堆的任何一个父节点的值, 都小于或等于它左、 右孩子节点的值。 二叉堆的根节点叫作堆顶。最大 ...
分类:
其他好文 时间:
2020-01-03 00:39:23
阅读次数:
76
首先关于客户端的坐标体系: 菱形框是客户端使用的单位方格,也就是游戏里雷达显示的坐标。客户端中采用的等距视角,使用菱形方格能与平面的场景地图模拟出3D效果。红色矩形框则是客户端和服务端公用的坐标格。 寻路方法入口: bool StartFindPath(CPos start, CPos end, v ...
分类:
其他好文 时间:
2019-12-30 23:27:28
阅读次数:
119
题目 中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。 例如, 设计一个支持以下两种操作的数据结构: void addNum(int num) 从数据流中添加一个整数到数据结构中。 double findMedian() 返回目前所有元素的中位数。 示例: 进阶: 解答 ...
分类:
编程语言 时间:
2019-12-27 00:26:43
阅读次数:
104
1. 堆排序 算法核心思想 堆排序利用堆的特点, 最大堆要求节点的元素都要不小于其孩子,最小堆要求节点元素都不大于其左右孩子,那么处于最大堆的根节点的元素一定是这个堆中的最大值,每次把堆顶元素放置在二叉树的尾部,然后重新建堆这样循环处理,最终就能完成排序。 核心算法逻辑如下: 建堆 把堆顶的元素和最 ...
分类:
编程语言 时间:
2019-12-09 21:22:00
阅读次数:
86
堆排序就是借助二叉堆进行排序,不了解二叉堆的可以先看这里。本文以升序排序为例,首先将待排序数组放置在最小堆中,此时堆顶一定是数组中最小的元素,然后删除堆顶元素,此时调整后的最小堆顶会是第二小的元素,从而实现排序。 时间复杂度:O(nlogn) 代码: public static void main( ...
分类:
编程语言 时间:
2019-11-25 00:15:22
阅读次数:
101
# 该题的标签为 1.堆 2. 二分查找 1. 首先我们用堆的思想来解决该问题 1.1 该矩阵的特点是 n*n 且每行和每列都是有序的 1.2 以上图矩阵为例,我们从行的角度去考虑(也可以从列) 每行的第一个为最小值,我们把1,10,12 放入最小堆 1.3 接下来我们从最小堆中,取出堆顶元素。同时 ...
分类:
其他好文 时间:
2019-11-24 15:26:22
阅读次数:
75