数据结构
cocoshe_
稚晖君的小迷弟
展开
-
Acwing2058. 笨拙的手指
Acwing2058. 笨拙的手指原题#include <iostream>#include <cstring>#include <algorithm>#include <unordered_set>using namespace std;int get(string a, int b) { int res = 0; for (int i = 0; i < a.size(); i ++ ) { res原创 2022-01-15 15:53:29 · 274 阅读 · 0 评论 -
LeetCode 82. 删除排序链表中的重复元素 II
LeetCode 82. 删除排序链表中的重复元素 II原题戳这里题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x原创 2021-04-29 21:41:36 · 98 阅读 · 0 评论 -
Acwing33. 链表中倒数第k个节点(3.25)(链表逆转)
Acwing33. 链表中倒数第k个节点(3.25)(链表逆转)输入一个链表,输出该链表中倒数第 k 个结点。注意:k >= 1;如果 k 大于链表长度,则返回 NULL;样例输入:链表:1->2->3->4->5 ,k=2输出:4题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListN原创 2021-04-07 09:51:12 · 77 阅读 · 0 评论 -
Acwing36. 合并两个排序的链表(3.24)(简单的归并)
Acwing36. 合并两个排序的链表(3.24)(简单的归并)输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。样例输入:1->3->5 , 2->4->5输出:1->2->3->4->5->5题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *原创 2021-04-07 09:20:42 · 81 阅读 · 0 评论 -
Acwing131. 直方图中最大的矩形(3.23)(单调栈)
Acwing131. 直方图中最大的矩形(3.23)(单调栈)直方图是由在公共基线处对齐的一系列矩形组成的多边形。矩形具有相等的宽度,但可以具有不同的高度。例如,图例左侧显示了由高度为 2,1,4,5,1,3,3 的矩形组成的直方图,矩形的宽度都为 1:2559_1.jpg通常,直方图用于表示离散分布,例如,文本中字符的频率。现在,请你计算在公共基线处对齐的直方图中最大矩形的面积。图例右图显示了所描绘直方图的最大对齐矩形。输入格式输入包含几个测试用例。每个测试用例占据一行,用以描述一个直原创 2021-04-06 23:42:02 · 116 阅读 · 0 评论 -
Acwing1497. 树的遍历(3.22)(根据中序和后序顺序建树,并求层序遍历)
1497. 树的遍历(3.22)(根据中序和后序顺序建树,并求层序遍历)一个二叉树,树中每个节点的权值互不相同。现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。输入格式第一行包含整数 N,表示二叉树的节点数。第二行包含 N 个整数,表示二叉树的后序遍历。第三行包含 N 个整数,表示二叉树的中序遍历。输出格式输出一行 N 个整数,表示二叉树的层序遍历。数据范围1≤N≤30输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:4 1 6 3 5 7 2原创 2021-04-06 12:41:57 · 123 阅读 · 0 评论 -
春季每日一题(3.18)反转链表Ⅱ
反转链表Ⅱ原题戳这里题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val原创 2021-03-25 16:05:26 · 99 阅读 · 0 评论 -
Acwing 849. Dijkstra求最短路 I(朴素算法)
Acwing 849. Dijkstra求最短路 I(朴素算法)给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出-1。数据范围1≤n≤500,1≤m≤105,图中涉及边长均不超过10000。输入样例:原创 2021-03-08 22:11:21 · 138 阅读 · 0 评论 -
Acwing 848. 有向图的拓扑序列(图论BFS的应用)
Acwing 848. 有向图的拓扑序列(图论BFS的应用)给定一个n个点m条边的有向图,点的编号是1到n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出-1。若一个由图中所有点构成的序列A满足:对于图中的每条边(x, y),x在A中都出现在y之前,则称A是该图的一个拓扑序列。输入格式第一行包含两个整数n和m接下来m行,每行包含两个整数x和y,表示存在一条从点x到点y的有向边(x, y)。输出格式共一行,如果存在拓扑序列,则输出任意一个合法的拓扑序列即可原创 2021-03-08 19:24:07 · 186 阅读 · 0 评论 -
Acwing 847. 图中点的层次(树与图的BFS)
Acwing 847. 图中点的层次(树与图的BFS)给定一个n个点m条边的有向图,图中可能存在重边和自环。所有边的长度都是1,点的编号为1~n。请你求出1号点到n号点的最短距离,如果从1号点无法走到n号点,输出-1。输入格式第一行包含两个整数n和m。接下来m行,每行包含两个整数a和b,表示存在一条从a走到b的长度为1的边。输出格式输出一个整数,表示1号点到n号点的最短距离。数据范围1≤n,m≤105输入样例:4 51 22 33 41 31 4输出样例:1题解(ST原创 2021-03-07 21:30:32 · 151 阅读 · 0 评论 -
Acwing 846. 树的重心(树与图的DFS)
Acwing 846. 树的重心(树与图的DFS)给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。输入格式第一行包含整数n,表示树的结点数。接下来n-1行,每行包含两个整数a和b,表示点a和点b之间存在一条边。输出格式输出一个整数m,表示将重心删除后,剩余各个连通块中点数的最大值。数据范围1≤n原创 2021-03-07 16:45:52 · 122 阅读 · 0 评论 -
Acwing 841. 字符串哈希(前缀哈希)
Acwing 841. 字符串哈希(前缀哈希)给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2,请你判断[l1,r1]和[l2,r2]这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数n和m,表示字符串长度和询问次数。第二行包含一个长度为n的字符串,字符串中只包含大小写英文字母和数字。接下来m行,每行包含四个整数l1,r1,l2,r2,表示一次询问所涉及的两个区间。注意,字符串的位置从1开始编号。输出格式原创 2021-03-06 17:23:15 · 114 阅读 · 0 评论 -
Acwing 840. 模拟散列表(哈希表:拉链法 + 开放寻址法)
Acwing 840. 模拟散列表(手写哈希表)维护一个集合,支持如下几种操作:“I x”,插入一个数x;“Q x”,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为”I x”,”Q x”中的一种。输出格式对于每个询问指令“Q x”,输出一个询问结果,如果x在集合中出现过,则输出“Yes”,否则输出“No”。每个结果占一行。数据范围1≤N≤105−109≤x≤109原创 2021-03-06 16:46:40 · 544 阅读 · 0 评论 -
Acwing 838. 堆排序
Acwing 838. 堆排序输入一个长度为n的整数数列,从小到大输出前m小的数。输入格式第一行包含整数n和m。第二行包含n个整数,表示整数数列。输出格式共一行,包含m个整数,表示整数数列中前m小的数。数据范围1≤m≤n≤105,1≤数列中元素≤109输入样例:5 34 5 1 3 2输出样例:1 2 3题解#include <iostream>#include <algorithm>using namespace std;const int原创 2021-03-05 23:29:32 · 174 阅读 · 0 评论 -
Acwing 837. 连通块中点的数量(并查集+维护根节点)
Acwing 837. 连通块中点的数量(并查集+维护根节点)给定一个包含n个点(编号为1~n)的无向图,初始时图中没有边。现在要进行m个操作,操作共有三种:“C a b”,在点a和点b之间连一条边,a和b可能相等;“Q1 a b”,询问点a和点b是否在同一个连通块中,a和b可能相等;“Q2 a”,询问点a所在连通块中点的数量;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为“C a b”,“Q1 a b”或“Q2 a”中的一种。输出格式对于每个询问指令”Q1 a原创 2021-03-04 23:04:40 · 99 阅读 · 1 评论 -
Acwing 836. 合并集合(并查集)
Acwing 836. 合并集合(并查集)一共有n个数,编号是1~n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有两种:“M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;“Q a b”,询问编号为a和b的两个数是否在同一个集合中;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为“M a b”或“Q a b”中的一种。输出格式对于每个询问指令”Q a b”,都要输出一个结果,如果a和b在同一集合内,则输出“原创 2021-03-04 00:37:49 · 152 阅读 · 1 评论 -
Acwing 143. 最大异或对(Trie树)
Acwing 143. 最大异或对(Trie树)在给定的N个整数A1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少?输入格式第一行输入一个整数N。第二行输入N个整数A1~AN。输出格式输出一个整数表示答案。数据范围1≤N≤105,0≤Ai<231输入样例:31 2 3输出样例:3题解#include <iostream>#include <algorithm>using namespace std;const in原创 2021-03-03 23:26:06 · 124 阅读 · 1 评论 -
Acwing 835. Trie字符串统计(Trie树模板)
Acwing 835. Trie字符串统计(Trie树模板)维护一个字符串集合,支持两种操作:“I x”向集合中插入一个字符串x;“Q x”询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。输入格式第一行包含整数N,表示操作数。接下来N行,每行包含一个操作指令,指令为”I x”或”Q x”中的一种。输出格式对于每个询问指令”Q x”,都要输出一个整数作为结果,表示x在集合中出现的次数。每个结果占一行。数据范围1≤N≤2∗10原创 2021-03-03 22:51:19 · 219 阅读 · 2 评论 -
Acwing 830. 单调栈
Acwing 830. 单调栈给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。输入格式第一行包含整数N,表示数列长度。第二行包含N个整数,表示整数数列。输出格式共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出-1。数据范围1≤N≤1051≤数列中元素≤109输入样例:53 4 2 7 5输出样例:-1 3 -1 2 2题解#include <iostream>#include <alg原创 2021-03-02 22:22:33 · 67 阅读 · 0 评论 -
Acwing 829. 模拟队列
Acwing 829. 模拟队列实现一个队列,队列初始为空,支持四种操作:(1) “push x” – 向队尾插入一个数x;(2) “pop” – 从队头弹出一个数;(3) “empty” – 判断队列是否为空;(4) “query” – 查询队头元素。现在要对队列进行M个操作,其中的每个操作3和操作4都要输出相应的结果。输入格式第一行包含整数M,表示操作次数。接下来M行,每行包含一个操作命令,操作命令为”push x”,”pop”,”empty”,”query”中的一种。输出格式对于原创 2021-03-02 13:19:43 · 85 阅读 · 0 评论 -
Acwing 828. 模拟栈
Acwing 828. 模拟栈实现一个栈,栈初始为空,支持四种操作:(1) “push x” – 向栈顶插入一个数x;(2) “pop” – 从栈顶弹出一个数;(3) “empty” – 判断栈是否为空;(4) “query” – 查询栈顶元素。现在要对栈进行M个操作,其中的每个操作3和操作4都要输出相应的结果。输入格式第一行包含整数M,表示操作次数。接下来M行,每行包含一个操作命令,操作命令为”push x”,”pop”,”empty”,”query”中的一种。输出格式对于每个”em原创 2021-03-02 13:13:33 · 112 阅读 · 0 评论 -
Acwing 826. 单链表(数组实现头插,任意插,删)
Acwing 826. 单链表(数组实现头插,任意插,删)实现一个单链表,链表初始为空,支持三种操作:(1) 向链表头插入一个数;(2) 删除第k个插入的数后面的数;(3) 在第k个插入的数后插入一个数现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…第n个插入的数。输入格式第一行包含整数M,表示操作次数。接下来M行原创 2021-03-01 23:00:54 · 160 阅读 · 0 评论 -
Acwing 827. 双链表(数组实现添,删)
Acwing 827. 双链表(数组实现添,删)实现一个双链表,双链表初始为空,支持5种操作:(1) 在最左侧插入一个数;(2) 在最右侧插入一个数;(3) 将第k个插入的数删除;(4) 在第k个插入的数左侧插入一个数;(5) 在第k个插入的数右侧插入一个数现在要对该链表进行M次操作,进行完所有操作后,从左到右输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…第n个插入的原创 2021-03-01 23:05:00 · 184 阅读 · 0 评论 -
数据结构:队列(Queue)的定义和它的函数们
数据结构:队列(Queue)的定义和它的函数们声明:队列满时:(rear+1)%maxsiz=front,少用一个存储空间,也就是数组的最后一个存数空间不用一些规律:1.和栈有点像,栈顶top是空的,队列的队尾指针所指也为空;栈底是有东西的,队列的队首指针也是有东西的。2.一般来说,队列的队首以上(包含队首),队尾以下(不含队尾)是有数据的;3.队首队尾每次变化都是+1的循环队列的定义:#define MAXQSIZE 100;typedef int QElemType;typ原创 2020-11-29 15:15:08 · 1696 阅读 · 0 评论 -
数据结构:链表(Linklist)的定义和它的函数们
数据结构:链表(Linklist)的定义和它的函数们链表的定义:对整体的定义(相当于一个大括号,保存一头一尾的指针)#define MAXSIZE 100typedef char ElemType;typedef struct _list{ ElemType* head; ElemType* tail;}List;对结点的定义typedef struct _node{ int index; //链表索引 ELemType data;原创 2020-11-28 20:16:03 · 4403 阅读 · 0 评论 -
数据结构:栈(Stack)的定义和它的函数们
数据结构:栈(Stack)的定义和它的函数们栈结构体的定义:#define MAXSIZE 100typedef char ElemType;typedef struct _stack{ ElemType* base; //栈顶 ElemType* top; //栈底 int StackSize; //栈大小}sqStack;栈的初始化:void InitStack(sqStack* S){ S->base = (ElemType*)mallo原创 2020-11-28 19:15:49 · 1817 阅读 · 0 评论