序言 二叉堆本质上是一种完全二叉树, 它分为两个类型。 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
有序列表merge核心思想-->谁小就选谁加入结果 所以这道题的最核心问题也就找到了,就是要找到任意时刻的最小元素。所以需要维持一个数据结构,随时返回其中最小的元素,也就是最堆 然后这道题的难点就变成了写最小堆的comparator 下方代码中有两种我比较喜欢的方式 class Solution { ...
分类:
编程语言 时间:
2019-11-21 09:21:13
阅读次数:
74
题目 实现在最小堆中删除给定序号为pos的元素,并由x返回,删除成功返回true,失败返回false。(注意:删除后要保持数据结构是最小堆。) 算法实现 在最小堆中删除给定序号为pos的元素,我们可以先删除该元素后将堆中最后一个元素补到该位子,然后向下调整为堆,在从该位置向上调整为堆。 1 如果堆空 ...
分类:
其他好文 时间:
2019-11-12 00:49:59
阅读次数:
90
看到这个题目首先想到是排序,那么时间复杂度自然就是O(NlgN)。那么使用二叉堆如何解决呢? 对于下面一个数组,共有12个元素,我们的目标就是找出第5大元素——12 首先建立一个具有M个元素的最小堆,那么堆顶是这M个元素的最小值,接下来遍历剩下的元素,如果一个元素小于堆顶元素则不做任何操作,如果大于 ...
分类:
编程语言 时间:
2019-11-09 23:48:52
阅读次数:
134
0,堆的简介 数据结构中的堆是一种特殊的二叉树,不同于 Java 内存模型中的堆。 堆必须符合以下两个条件: 从第一点可以知道,堆适合用数组来存储。 第二点中,若父节点都大于等于左右子节点,则被称为大顶堆,反之则为小顶堆。 图-最大堆 1,堆的特性 2,堆的实现 3,堆的应用 3.1堆排序 利用堆这 ...
分类:
其他好文 时间:
2019-09-24 21:03:51
阅读次数:
96