数据结构
文章平均质量分 53
爱玲姐姐
大家好,我是计爱玲,英文名:Cathy,是一名前端开发工程师,热爱解锁各种前端新技术。我的爱豆是王一博,当然我也想认识更多同行的帅哥,
我的微信jal517486222,欢迎加我好友交流编程技术*^_^*
个人网站:https://jiailing.com
展开
-
图中连通块的个数:并查集
图的连通性问题 本文为转载,点击查看原文在地图上有若干城镇(点),已知所有有道路直接相连的城镇对。要解决整幅图的连通性问题。比如,随意给你两个点,让你判断它们是否连通;或者问你整幅图一共有几个连通块,也就是被分成了几个互相独立的块。 修路工程问题会问还需要修几条路才能将所有城镇连通起来,实质就是求有几个连通块。如果只有1个连通块,说明整幅图上的点都连起来了,不用再修路了;如果是2...转载 2018-01-18 12:02:59 · 1919 阅读 · 1 评论 -
PAT-A-1066 Root of AVL Tree (25 分) 创建平衡二叉查找树 C++题解
1066 Root of AVL Tree (25 分)题目传送门:1066 Root of AVL Tree (25 分)一、题目大意给定一个数列,创建平衡二叉查找树二、解题思路这道题就是一个赤裸裸的构建平衡树的问题,然而我之前一直没有写过平衡树的代码,因为对平衡树的旋转不太理解。这次我不想绕过这个知识盲点了,在网上搜了博客学习平衡树的知识。平衡树(AVL)的旋转操作参考了这篇博客:...原创 2019-08-26 12:40:30 · 805 阅读 · 0 评论 -
PAT-A-1044 Shopping in Mars (25 分)滑动窗口、队列的使用 C++题解
1044 Shopping in Mars (25 分)题目传送门:1044 Shopping in Mars (25 分)一、题目大意求长度为n的数组中,和为m的所有子数组,输出所有子数组的左右下标。如果没有和为m的子数组,则输出最小的和超过m的子数组。二、解题思路通过队列保存滑动窗口,并且通过一个变量sum同步保存当前滑动窗口里子数组的和。循环判断当窗口里的子数组和大于等于m时,则...原创 2019-08-21 16:45:02 · 834 阅读 · 0 评论 -
PAT-A-1064 Complete Binary Search Tree (30 分) 完全二叉查找树+排序后中序遍历构建完全二叉树
1064 Complete Binary Search Tree (30 分)题目传送门:1064 Complete Binary Search Tree (30 分)一、题目大意给定一个长度为n的序列,构成一个完全二叉查找树,横向遍历输出二、解题思路拿着样例将完全二叉查找树画出来就会发现,这个树从树顶拿一个手电筒照下来,节点映射到水平面的顺序就是有序的 ,其实就是将给定序列排好序的中序...原创 2019-08-25 21:03:44 · 875 阅读 · 0 评论 -
PAT-A-1057 Stack (30 分) 树状数组+二分 (C++题解)
1057 Stack (30 分)题目传送门:1057 Stack (30 分)一、题目大意模拟栈的操作,增加找栈中中位数的功能二、解题思路第一次写树状数组知识点的题,之前一直不懂树状数组,感觉不好理解那个后缀数组,今天看到一篇很好的文章终于搞懂了树状数组,感谢这位大佬的博客:树状数组简单易懂的详解通过树状数组维护数组,快速得到前缀和,然后就通过常规的二分,来快速找到中位数。三、A...原创 2019-08-24 18:42:05 · 822 阅读 · 0 评论 -
PAT-A-1030 Travel Plan (30 分)双重指标(最短路径、最小花费)的Dijkstra算法(使用优先级队列)+打印路径(C++题解)
1030 Travel Plan (30 分)题目传送门:1030 Travel Plan (30 分)一、题目大意给定城市之间的距离和费用,求出发点和终点之间最短路径,如果最短路径有多条,则求最短路径中的最小花费,并且打印路径。Sample Input:4 5 0 30 1 1 201 3 2 300 3 4 100 2 2 202 3 1 20Sample Outpu...原创 2019-08-15 00:54:15 · 766 阅读 · 0 评论 -
PAT-A-1017 Queueing at Bank (25 分) 优先级队列模拟 C++题解
1017 Queueing at Bank (25 分)题目传送门:1017 Queueing at Bank (25 分)一、题目大意n个人,k个窗口,求平均每个人等待的时间。超过17:00到达的人不会被服务,也就是不算入平均时间。8:00开门,来早的人要等到8:00才会得到服务。二、解题思路定义一个结构体存储每个人来到银行的时间、开始被服务的时间、结束被服务的时间。定义一个优先级队列...原创 2019-08-04 09:56:08 · 820 阅读 · 0 评论 -
PAT-A-1014 Waiting in Line (30 分) 模拟 C++题解
1014 Waiting in Line (30 分)一、题目大意题目传送门:1014 Waiting in Line (30 分)银行有n个窗口,每个窗口前面最多可排m个人,共有k个人来银行办理业务,已知了每个人办理业务需要花费的时间。求指定的q个人什么时刻可以办完业务。银行在8:00上班,在17:00之后下班,如果处理到某人已经下班了则输出Sorry。每个窗口排满了m个人后,剩下的人要等...原创 2019-07-29 23:23:40 · 784 阅读 · 0 评论 -
C++实现字典树的增删查写前缀打印
C++实现字典树的增删查写前缀打印//// Created by jal on 19-3-9.//#include <bits/stdc++.h>using namespace std;const int SIZE = 26;struct Node{ int sum; bool isEnd; char val; vector<Node...原创 2019-03-09 13:39:31 · 1278 阅读 · 1 评论 -
2019.1.25-2019.2.10大四寒假在家算法学习总结
排序import java.util.Arrays;class BubbleSort { public int[] bubbleSort(int[] A, int n) { // write code here for (int i = 1; i &lt; n; i++) { for (int j = 0; j &lt; n -...原创 2019-02-10 19:47:07 · 1268 阅读 · 2 评论 -
nyist 230 彩色棒 (字典树+并查集+欧拉通路)
彩色棒 (nyist 230)解题思路: 考点 算法 数据结构:欧拉回路、并查集、字典树 这道题是一个很好的图论综合题,题目说的是求给出的m个棒子是否能够拼接成一个棒子,只有两个棒子的某一端颜色相同才能拼接。 1. 首先,我们要将输入的字符串转化为整型的数字,作为无向图的点,由于数据太大,所以不能用map,要用字典树来存储 2. 然后判断这个无向图是否连通,如果不连通...原创 2018-05-27 21:57:38 · 734 阅读 · 0 评论 -
nyist 130 相同的雪花(HashMap)
相同的雪花(nyist 130)思路: 每个雪花的六个叶子组成元素可能不同,如果不同,先分类,用HashMap存放,以雪花六个叶子的排序序列ArrayList为键,将六个元素都相同的雪花划分到同一类,即放进同一个集合Vector<ArrayList>中。 在同一类中,当雪花的数量超过 6!/26!/26! / 2 即 360360360 的时候,一定会出现相同的雪...原创 2018-05-09 17:50:25 · 861 阅读 · 0 评论 -
nyist 129 树的判定 (并查集)
树的判定nyist129样例输入 6 8 5 3 5 2 6 4 5 6 0 08 1 7 3 6 2 8 9 7 5 7 4 7 8 7 6 0 03 8 6 8 6 4 5 3 5 6 5 2 0 0 -1 -1 样例输出 Case 1 is a tree. Case 2 is a tree. Case 3 is not a tree....原创 2018-05-09 14:11:51 · 759 阅读 · 0 评论 -
链式前向星
本文为转载,点击此处查看原文我们首先来看一下什么是前向星.前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了.用len[i]来记录所有以i为起点的边在数组中的存储长度. 用head[i]记录以i为边集在数组中的第一个存储位置.那么对...转载 2017-12-09 20:16:17 · 725 阅读 · 0 评论 -
字典树 / Trie树
字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。 字典树与字典很相似,当你要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不在,...原创 2017-12-20 21:08:07 · 750 阅读 · 0 评论 -
树状数组 BIT
树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值;经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值(如果加入多个辅助数组则可以实现区间修改与区间查询)。 这种数据结构(算法)并没有C++和...原创 2018-01-17 16:13:57 · 729 阅读 · 0 评论 -
构造哈夫曼树,并求加权路径长度 C++(优先级队列)
C++构造哈夫曼树引用一下百度百科里面的构造哈夫曼树的描述:假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;(3)从森林...原创 2019-09-17 13:34:06 · 2764 阅读 · 1 评论