随笔分类 - 算法
随手写的
摘要:1e5的数据量,要求时间复杂度小于O(n^2) 1.可以排序后判断是否出现相同数字,O(nlogn) class Solution { public: bool containsDuplicate(vector<int>& nums) { sort(nums.begin(),nums.end());
阅读全文
摘要:https://www.acwing.com/problem/content/3380/ 这题和第11届蓝桥杯B组国赛题类似 数论知识,就是分解质因数,把质数的指数加1即可 需要注意的是,本题应该是不能用数组模拟的,空间太少了 可以用unordered_map存储 #include<iostream
阅读全文
摘要:线性dp 即递推状态转移方程有明显的线性关系,可能是1维线性,可能是2维线性,等等 如数字三角形:https://www.acwing.com/problem/content/900/ 首先考虑状态表示和状态计算 给图一个编号,如图,7为(4,2) 状态表示: f[i][j]表示所有从起点,走到i,
阅读全文
摘要:背包问题,本质上就是给几种物品,每个物品有体积有价值,可能有个数限制 有一个容量有限的背包,在背包能装下的前提下,能装的最大价值是多少 背包问题一般分为这几种: 01背包:每件物品只有一个完全背包:每件物品有无限个多重背包:每件物品有Si个(有限个)分组背包:所有物品被分为多个组,每一组最多只能选一
阅读全文
摘要:https://www.acwing.com/problem/content/3795 题目要求一个数是质数且这个数能被两个相邻质数+1之和得到并且满足这样的条件 还要大于k次 主要难点就是读题意 读懂题意后可以直接使用线性筛把质数预处理一遍质数都存在st和primes中 预处理质数后直接遍历st找
阅读全文
摘要:https://www.acwing.com/problem/content/4312/要点就是斜率相同时可以被一束激光打到而斜率有可能在轴上,计算斜率可能导致分母为0,于是采用pair对的形式去存储而不是直接计算存储为pair对后再映射除以最大公约数({x,0} 这样在轴上的点也是都除以最大公约数
阅读全文
摘要:模板: //质数判定--试除法 //朴素 O(N) bool is_prime(int n) { if(n<2)return false; for(int i=2;i<n;i++) { if(n%i==0)return false; } return true; } //朴素优化 O(sqrt(N)
阅读全文
摘要:并查集(Union(并),Find(查),Set(集))一般用树的形式保存集合,但是是用数组模拟的树对于并查集树上的所有点,只有根结点是p[x]=x的,其他的p[x]都是父结点那么就可以通过while(p[x]!=x)x=p[x];来查询一个点的编号,属于哪个集合询问两个元素是否在同一个集合中,直接
阅读全文
摘要:https://www.acwing.com/problem/content/830/https://www.acwing.com/problem/content/831/ 相比数组模拟链表要简单的多,要注意的是tt的初始值,看个人习惯设置,栈一般为0,队列一般为1 //栈 #include<ios
阅读全文
摘要:https://www.acwing.com/problem/content/829/与数组模拟单链表相似但是与之相比多一个l[N],r[N]用这两个向量表示每个结点的前驱和后继初始状态:令head为0,tail为1,初始就这两个点,开头和结尾插入:删除: #include<iostream> us
阅读全文
摘要:https://www.acwing.com/problem/content/828/链表的实现有许多种,可以使用struct加指针的方式实现,但是这样的方式会使用new运算符,new运行的十分的慢动态链表因为new的原因极其慢而数组模拟的静态链表极其快在面试时的数据量一般非常大,这时候new就会拖
阅读全文
摘要:https://www.acwing.com/problem/content/3780/一眼递推,主要有每个砖块只能操作一次,以及操作顺序不影响结果这两个性质但是第一次写的代码一塌糊涂,这次模仿了一下y总的代码风格,感觉不错 #include<iostream> #include<vector> u
阅读全文
摘要:https://www.acwing.com/problem/content/2818/双指针模板题:i指针只有匹配到相等才++,j指针无论如何每次都++那么i==n时,意味着b序列中存在着a序列,且有序离散存放 #include<iostream> using namespace std; con
阅读全文
摘要:https://www.acwing.com/problem/content/802/二分:枚举a,对于每一个a[i],都二分一下求x-a[i],是否在b数组中 #include<iostream> using namespace std; const int N = 1e5+10; int n,m
阅读全文
摘要:https://www.acwing.com/problem/content/description/801/简单双指针,首先考虑暴力做法:先枚举i为终点,再枚举j为起点,判断是否合乎题意,合乎题意就更新答案再考虑优化,此题显然i与j具有单调性,i,j都只能往后走,无法回头,因此可以用双指针优化使用
阅读全文
摘要:https://www.acwing.com/problem/content/167/ 一般dfs,虽然是一般dfs但也不是一下子就能秒的首先还得是确定搜索顺序这里是:从前往后,依次枚举每一只小猫,对于每一只小猫,枚举这只小猫可以坐的车,以及再开一辆新车这样的顺序可以覆盖每种情况剪枝:优化搜索顺序:
阅读全文
摘要:https://www.acwing.com/problem/content/167/n为100,因此对于我们这种枚举k值,枚举两个子串起点来判定是否存在相同子串的暴力做法O(N^4)是可以过的 #include<iostream> #include<cstring> using namespace
阅读全文
摘要:https://www.acwing.com/problem/content/803/签到题,利用按位与求数的二进制1的个数也可以采用lowbit操作 #include<iostream> using namespace std; int n; int a; int main() { cin >>
阅读全文
摘要:https://www.acwing.com/problem/content/1249/1e5的数据量,应该是排个序后缀表达式也可以叫逆波兰表达式,对于一个式子,将元素不断的入栈,但是遇到符号就出两个元素进行运算再入栈这样的模式使得它天生的是一个树,且式子是dfs的后序遍历的结果这样的树,其内部结点
阅读全文
摘要:https://www.acwing.com/problem/content/description/1241/1e5的数据量,显然不能暴搜,但是我还是要暴搜显然寄了,只能过一半数据,这题的正确做法应该分情况讨论 #include<iostream> #include<algorithm> #inc
阅读全文

浙公网安备 33010602011771号