数据结构
江南路漫
这个作者很懒,什么都没留下…
展开
-
最小生成树Prim和Kruskal算法
两种算法都是基于贪心的方法。Prim算法:适用于稠密图。时间复杂度为O(V^2)。(V为顶点数)与Dijkstra算法相似,每次选择离离原点最近的点,加入到现有的生成树中。Kruskal算法:适用于稀疏图。时间复杂度为O(E*logE)。(E为边数)将边按照长度由小到大进行排序(边的结构体内要存入连接的两个顶点的信息),每次选择最短的一条边出来,在确认加入新边不会形成环后,将其加入生成树中。如何判断是否会形成环的方法是,建立一个关于边的并查集,加入新边时判断边连接的两个端点是否在同一个集合中。若原创 2022-05-01 00:24:04 · 451 阅读 · 0 评论 -
最短路径SPFA和Bellman-Ford算法
参考模板:#include<bits/stdc++.h>using namespace std;#define INF 0x3f3f3f3ftypedef long long ll;struct node { int v, dis; node(int v, int dis) { this->v = v, this->dis = dis; }};vector<node> adj[1005];int n, d[1005], num[1005];原创 2022-04-30 19:20:17 · 427 阅读 · 0 评论 -
AcWing 删减 栈思想
思路:这道题要是不卡时间复杂度,是道大水题,然而字符串的长度到了6次方,若使用string中的erase函数,看似时间复杂度不高,其实,每次删除子字符串后,后边的字符串需要移动到前面来,最坏的情况下,时间复杂度能达到O(n*n)。那么我可以想办法让字符串不要发生移动。可以一个个地将字符串加入到新字符串中,加一个字符就判断一次,判断是否满足删除条件。参考代码:#include<bits/stdc++.h>using namespace std;#define INF 0x3f3f3f..原创 2022-04-22 23:24:14 · 263 阅读 · 0 评论 -
Is It a Complete AVL Tree AVL树
思路:考察的点是建立AVL树以及如何判断是否为满二叉树。建立AVL树需要搞清楚LL、LR、RR、RL四种情况如何左旋和右旋,如下:类型BF条件操作LLBF(root)=2,BF(root->lchild)=1root右旋LRBF(root)=2,BF(root->lchild)=-1先root->lchild左旋,再root右旋RRBF(root)=-2,BF(root->rchild)=-1root左旋RLBF(roo..原创 2022-04-22 20:28:10 · 342 阅读 · 0 评论 -
520 钻石争霸赛 7-8浪漫侧影(二叉树的遍历)
“侧影”就是从左侧或者右侧去观察物体所看到的内容。例如上图中男生的侧影是从他右侧看过去的样子,叫“右视图”;女生的侧影是从她左侧看过去的样子,叫“左视图”。520 这个日子还在打比赛的你,也就抱着一棵二叉树左看看右看看了……我们将二叉树的“侧影”定义为从一侧能看到的所有结点从上到下形成的序列。例如下图这棵二叉树,其右视图就是 { 1, 2, 3, 4, 5 },左视图就是 { 1, 6, 7, 8, 5 }。于是让我们首先通过一棵二叉树的中序遍历序列和后序遍历序列构建出一棵树,然后你要输出这棵树的左视原创 2021-05-21 08:36:32 · 646 阅读 · 2 评论 -
数据结构 堆中的路径(最小堆)
题目:将一系列给定数字插入一个初始为空的小顶堆H[ ]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。输入样例:5 346 23 26 24 10原创 2021-04-12 00:57:29 · 641 阅读 · 0 评论 -
数据结构 最大堆和最小堆
前言:关于最大堆和最小堆的题目,我做过了很多次,但是好像没有一个是完全独立AC的。2021春季PAT考试的前一天,天梯赛校内赛还专门考了最小堆,我复习了一下,结果第二天PAT考了最大堆,又是没做出来…天梯赛快到了,打算写篇博客整理一下最大堆和最小堆问题的解法。正文:最大堆和最小堆(又称大顶堆和小顶堆)问题一般是建立一个普通的数组,根据二叉树的性质对其进行交换移动。建堆的方式有全放进去再排,也有边插入边排序的。由于最大堆和最小堆是不唯一的,因此这两种方式得出来的结果是不唯一的,一定要仔细地阅读题意,分原创 2021-04-12 00:17:29 · 1174 阅读 · 0 评论