![](https://img-blog.csdnimg.cn/2021083009514970.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
第二讲 数据结构
包括单链表,双链表,栈,队列,单调栈,单调队列,KMP,Trie,并查集,堆,哈希表等内容。
falldeep
远和近
展开
-
单调栈(acwing算法题c++)
题目给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。输入格式第一行包含整数N,表示数列长度。第二行包含N个整数,表示整数数列。输出格式共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出−1。数据范围1≤N≤1051≤数列中元素≤109输入样例:53 4 2 7 5输出样例:-1 3 -1 2 2代码#include<iostream>...原创 2021-07-09 19:21:27 · 220 阅读 · 0 评论 -
最大异或对(acwing算法题C++)
题目在给定的N个整数A1,A2……AN 中选出两个进行xor(异或)运算,得到的结果最大是多少?输入格式第一行输入一个整数N。第二行输入N个整数A1~AN。输出格式输出一个整数表示答案。数据范围1≤N≤105,0≤Ai<231输入样例:31 2 3输出样例:3代码#include<iostream>using namespace std;// 节点个数 31...原创 2021-07-11 11:37:48 · 227 阅读 · 0 评论 -
用数组模拟栈(acwing复习题)
题目实现一个栈,栈初始为空,支持四种操作:push x– 向栈顶插入一个数x; pop– 从栈顶弹出一个数; empty– 判断栈是否为空; query– 查询栈顶元素。现在要对栈进行M个操作,其中的每个操作3和操作4都要输出相应的结果。输入格式第一行包含整数M,表示操作次数。接下来M行,每行包含一个操作命令,操作命令为push x,pop,empty,query中的一种。输出格式对于每个empty和query操作都要输出一个查询结...原创 2021-06-24 12:49:38 · 180 阅读 · 0 评论 -
数组模拟单链表(acwing复习题)
题目实现一个单链表,链表初始为空,支持三种操作:向链表头插入一个数; 删除第k个插入的数后面的数; 在第k个插入的数后插入一个数。现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…第n个插入的数。输入格式第一行包含整数M,表示操作次数。接下来M行,每行包...转载 2021-06-24 11:40:38 · 57 阅读 · 1 评论 -
利用栈实现表达式求值(c++)
题目给定一个表达式,其中运算符仅包含+,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。注意:数据保证给定的表达式合法。 题目保证符号-只作为减号出现,不会作为负号出现,例如,-1+2,(2+2)*(-(1+1)+2)之类表达式均不会出现。 题目保证表达式中所有数字均为正整数。 题目保证表达式在中间计算过程以及结果中,均不超过2e31−1。 题目中的整除是指向0取整,也就是说对于大于0的结果向下取整,例如5/3=1,对于小于0的结果向上取整,...原创 2021-07-09 11:16:52 · 3690 阅读 · 3 评论 -
双链表的数组实现(acwing复习题)
题目实现一个双链表,双链表初始为空,支持5种操作:在最左侧插入一个数; 在最右侧插入一个数; 将第k个插入的数删除; 在第k个插入的数左侧插入一个数; 在第k个插入的数右侧插入一个数现在要对该链表进行M次操作,进行完所有操作后,从左到右输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这nn个数依次为:第1个插入的数,第2个插入的数,…第n个插入的数。输入格式...原创 2021-06-24 12:22:01 · 102 阅读 · 0 评论 -
食物链(acwing算法题C++)
题目动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B,B吃C,C吃A。现有N个动物,以1∼N 编号。每个动物都是A,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是1 X Y,表示X和Y是同类。第二种说法是2 X Y,表示X吃Y。此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句...原创 2021-07-11 16:59:49 · 847 阅读 · 0 评论 -
模拟堆(acwing算法题C++)
题目维护一个集合,初始时集合为空,支持如下几种操作:I x,插入一个数x; PM,输出当前集合中的最小值; DM,删除当前集合中的最小值(数据保证此时的最小值唯一); D k,删除第k个插入的数; C k x,修改第k个插入的数,将其变为x;现在要进行N次操作,对于所有第2个操作,输出当前集合的最小值。输入格式第一行包含整数N。接下来N行,每行包含一个操作指令,操作指令为I x,PM,DM,D k或C k x中的一种。输出格式对于每个输...原创 2021-07-12 17:15:18 · 269 阅读 · 0 评论 -
合并集合(acwing算法题C++)
题目一共有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,都要输出一个结果,如果aa和bb在同一...原创 2021-07-11 12:07:12 · 251 阅读 · 0 评论 -
堆排序(acwing算法题C++)
题目输入一个长度为n的整数数列,从小到大输出前m小的数。输入格式第一行包含整数n和m。第二行包含n个整数,表示整数数列。输出格式共一行,包含m个整数,表示整数数列中前m小的数。数据范围1≤m≤n≤105,1≤数列中元素≤109输入样例:5 34 5 1 3 2输出样例:1 2 3代码#include<iostream>using namespace std;const int N = 1e5...原创 2021-07-12 12:19:09 · 165 阅读 · 1 评论 -
字符串哈希(acwing算法题C++)
题目给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2,请你判断[l1,r1][l1,r1]和[l2,r2][l2,r2]这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数n和m,表示字符串长度和询问次数。第二行包含一个长度为n的字符串,字符串中只包含大小写英文字母和数字。接下来m行,每行包含四个整数l1,r1,l2,r2,表示一次询问所涉及的两个区间。注意,字符...原创 2021-07-13 08:46:27 · 197 阅读 · 0 评论 -
数组模拟队列(c++算法题)
题目实现一个队列,队列初始为空,支持四种操作:push x– 向队尾插入一个数xx; pop– 从队头弹出一个数; empty– 判断队列是否为空; query– 查询队头元素。现在要对队列进行M个操作,其中的每个操作3和操作4都要输出相应的结果。输入格式第一行包含整数M,表示操作次数。接下来M行,每行包含一个操作命令,操作命令为push x,pop,empty,query中的一种。输出格式对于每个empty和query操作都...原创 2021-07-09 18:01:33 · 644 阅读 · 0 评论 -
整数滑动窗口(acwing算法题C++)
题目给定一个大小为n≤106 的数组。有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到k个数字。每次滑动窗口向右移动一个位置。以下是一个例子:该数组为[1 3 -1 -3 5 3 6 7],k为3。窗口位置 最小值 最大值 [1 3 -1] -3 5 3 6 7 -1 3 1 [3 -1 -3] 5 3 6 7 -3 3 1 3 [-1 -3 5] 3 6 7 -3 5 1 ...原创 2021-07-10 10:30:38 · 1069 阅读 · 0 评论 -
模拟散列表(哈希表拉链法和开放寻址法C++)
题目维护一个集合,支持如下几种操作:I x,插入一个数x; Q x,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为I x,Q x中的一种。输出格式对于每个询问指令Q x,输出一个询问结果,如果x在集合中出现过,则输出Yes,否则输出No。每个结果占一行。数据范围1≤N≤105−109≤x≤109输入样例:5...原创 2021-07-12 18:49:49 · 357 阅读 · 0 评论 -
连通块中点的数量(acwing算法题C++)
题目给定一个包含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 b,...原创 2021-07-11 15:29:07 · 203 阅读 · 0 评论 -
KMP字符串(acwing算法题c++)
题目给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串P在模式串S中多次作为子串出现。求出模板串P在模式串S中所有出现的位置的起始下标。输入格式第一行输入整数N,表示字符串P的长度。第二行输入字符串P。第三行输入整数M,表示字符串S的长度。第四行输入字符串S。输出格式共一行,输出所有出现位置的起始下标(下标从0开始计数),整数之间用空格隔开。数据范围1≤N≤1051≤M≤106...原创 2021-07-10 11:31:25 · 192 阅读 · 0 评论 -
Trie字符串统计(acwing算法题C++)
题目维护一个字符串集合,支持两种操作:I x向集合中插入一个字符串x; Q x询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过105,字符串仅包含小写英文字母。输入格式第一行包含整数N,表示操作数。接下来N行,每行包含一个操作指令,指令为I x或Q x中的一种。输出格式对于每个询问指令Q x,都要输出一个整数作为结果,表示x在集合中出现的次数。每个结果占一行。数据范围1≤N≤2∗104输入样例:5...转载 2021-07-10 17:14:10 · 90 阅读 · 0 评论