我选的是前端方向,所以编程题的题目也比较简单,但是坑很多呀,不知道错在哪,最后没办法直接用最暴力的方法AC了。 笔试分为选择和编程,选择20个,每个三分,编程题两道每道20分。 选择题考点: 1、数据结构(包括大顶堆、希尔排序、B-树、以及hash) 2、计算机网络(只考了一两题,TCP和UDP) ...
分类:
其他好文 时间:
2018-09-15 13:12:04
阅读次数:
203
主要是理解思路,思路有了代码则是水到渠成。 堆排序实际是数组排序,使用数组的下标构造成一个二叉树,想法很有意思。 加入有数组a,那可以把a[0]视为根节点,它的子节点为a[2*0+1],a[2*0+2],即对于任何一个节点a[i],则有子节点a[2*i+1]和a[2*i+2]。 1. 构建一个大顶堆 ...
分类:
编程语言 时间:
2018-09-12 19:55:06
阅读次数:
400
队列的特点是先进先出。通常都把队列比喻成排队买东西,大家都很守秩序,先排队的人就先买东西。但是优先队列有所不同,它不遵循先进先出的规则,而是根据队列中元素的优先权,优先权最大的先被取出。这就很像堆的特征:总是移除优先级最高的根节点。 重点:优先级队列,是要看优先级的,谁的优先级更高,谁就先得到权限。 ...
分类:
其他好文 时间:
2018-09-09 23:09:24
阅读次数:
217
预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于 ...
分类:
编程语言 时间:
2018-09-07 14:19:09
阅读次数:
167
题目:戳这里 学习博客:戳这里 题意:给一个树加最少的边,使得1到所有点的距离小于等于2. 解题思路:分析样例3可以看出,如果一个点到1的距离大于2,那么建立1到该点的父亲节点的边将比直接与该点建边更优。官方题解的做法是把所有与1距离大于2的点放到大顶堆里维护,每次取出最远的点,染色与该点父节点以及 ...
分类:
其他好文 时间:
2018-09-06 02:48:14
阅读次数:
312
不稳定 O(nlogn) 大顶堆(从大到小排序):每个结点的值都大于等于其左右孩子的值的二叉树 小顶堆(从小到大排序):每个结点的值都小于等于其左右孩子的值的二叉树 如何排序? 将待排序序列构建成一个小顶堆,堆顶的元素即为所有元素中的最小值 在输出堆顶的最小值之后,调整堆,使剩余的n-1个元素又建成 ...
分类:
编程语言 时间:
2018-08-30 01:56:19
阅读次数:
204
算法描述:许多应用程序都需要按照顺序处理任务,但是不一定要求他们全部有序,或是不一定要一次就将他们排序。很多情况下我们只需要处理当前最紧急或拥有最高优先级的任务就可以了。面对这样的需求,优先队列算法是一个不错的选择。 算法图示: 算法解释:上图所展示的是最大优先队列(大顶堆)的算法逻辑,在这个标准的 ...
分类:
其他好文 时间:
2018-08-25 22:57:13
阅读次数:
239
Top K问题在数据分析中非常普遍的一个问题(在面试中也经常被问到),比如: 从20亿个数字的文本中,找出最大的前100个。 解决Top K问题有两种思路, 最直观:小顶堆(大顶堆 -> 最小100个数); 较高效:Quick Select算法。 LeetCode上有一个问题215. Kth Lar ...
分类:
其他好文 时间:
2018-08-14 22:57:54
阅读次数:
206
选择排序,冒泡排序,快速排序,归并排序,插入排序,希尔排序,计数排序,桶排序,基数排序 以上是一些常用的排序算法。 选择排序 for(int i = 0; i using namespace std; int n; int a[10] = {9, 19, 7, 2, 4, 5, 6, 8, 10, ...
分类:
编程语言 时间:
2018-07-28 12:03:28
阅读次数:
174
堆是具有下列性质的完全二叉树: 每个结点的值L[i]L[i]都大于或等于其左孩子L[left(i)]L[left(i)]和右孩子L[right(i)]L[right(i)]结点的值,称为大顶堆(最大堆); 每个结点的值L[i]L[i]都小于或等于其左孩子L[left(i)]L[left(i)]和右孩 ...
分类:
其他好文 时间:
2018-07-22 23:34:35
阅读次数:
216