AcWing算法基础复习专栏
快要完结基础课了,但前面知识也忘得差不多了,打算写写博客复习一下。。。
stowsyorz
努力才会更优秀
展开
-
最长连续不重复子序列(双指针算法)
# include <bits/stdc++.h> using namespace std; const int N = 1e5+10; int a[N], s[N]; int main() { int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; int res = 0; for(int i=0, j=0;i<n;i++) { s[a[i]]++; while(s[a[i]]>1) .原创 2021-05-26 19:35:38 · 71 阅读 · 0 评论 -
图中点的层次(树与图的广度优先遍历)
代码如下: # include <iostream> # include <cstring> # include <queue> # include <algorithm> # include <cstdio> using namespace std; const int N = 100010; int h[N], e[N], ne[N], idx, n, m; int d[N]; queue<int> q; void add.原创 2021-05-15 19:36:21 · 96 阅读 · 0 评论 -
树的重心(树与图的深度优先遍历)
题目:给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。 重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。 输入格式: 第一行包含整数 n,表示树的结点数。 接下来 n−1 行,每行包含两个整数 a 和 b,表示点 a 和点 b 之间存在一条边。 输出格式: 输出一个整数 m,表示将重心删除后,剩余各个连通块中点数的最大值。 ...原创 2021-05-15 11:35:49 · 97 阅读 · 0 评论 -
二分(整数二分和浮点数二分)
整数二分 通过两个例题进行总结归纳 例题一:数的范围 题目:给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。 对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。 如果数组中不存在该元素,则返回 -1 -1。 输入格式:第一行包含整数 n 和 q,表示数组长度和询问个数。 第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。 接下来 q 行,每行包含一个整数 k,表示一个询问元素。 输出格式:共 q 行,每行包含两个整数,表示所求元素原创 2021-05-14 00:16:51 · 109 阅读 · 0 评论 -
走迷宫(宽度优先搜索BFS)
题目:给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。 最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。 请问,该人从左上角移动至右下角 (n,m) 处,至少需要移动多少次。 数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路 输入样例: 5 5 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0.原创 2021-05-11 15:52:10 · 164 阅读 · 0 评论 -
排列数字(深度优先搜索DFS)
题目:给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入样例: 3 输出样例: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 # include <iostream> using namespace std; int nums[10], state[10];//设置保存数据的nums数组和状态数组state int n; void dfs(int u)//这里的u可以看成层数 { .原创 2021-05-11 15:10:35 · 202 阅读 · 0 评论 -
蛇形矩阵
题目:输入两个整数 n 和 m,输出一个 n 行 m 列的矩阵,将数字 1 到 n×m 按照回字蛇形填充至矩阵中。 输入样例: 3 3 输出样例: 1 2 3 8 9 4 7 6 5 # include <iostream> # include <cstdio> using namespace std; int s[100][100]; int main() { int n, m; cin>>n>>m; int dx[]=.原创 2021-05-10 19:49:51 · 132 阅读 · 1 评论 -
表达式求值(栈+unordered_map)
第一次写博客,见谅hh Description:给定一个表达式,其中运算符仅包含 +,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。 Input: (2+2) * (1+1) Output: 8 原题链接 # include <bits/stdc++.h> using namespace std; stack<int> num; stack<char> op; void eval() { auto b = num.top(原创 2021-05-03 14:37:31 · 155 阅读 · 0 评论