随笔分类 -  算法

摘要:堆排序: 1.堆排序视为一颗完全二叉树,初始序号按层序赋予,从1开始。 2.与快排时间复杂度相同logn,常数空间复杂度 3.不稳定 4.对于有序,无序的序列效率区别不大。 堆排序的核心操作: 建堆 BuildMaxHeap(); 从[n/2]到根节点1,循环根据当前节点为调整子树。 调整 Heap 阅读全文
posted @ 2022-06-08 20:17 秋月桐 阅读(87) 评论(0) 推荐(0)
摘要:https://leetcode.cn/problems/find-all-duplicates-in-an-array/ 1.值域和变量相同空间映射 class Solution { public: vector<int> findDuplicates(vector<int>& nums) { / 阅读全文
posted @ 2022-05-10 22:17 秋月桐 阅读(39) 评论(0) 推荐(0)
摘要:一. 单源最短路问题 Dijkstra(基于贪心) A.边权为正 储存图的数据结构:邻接表(稀疏图)或邻接矩阵(稠密图) 算法需要的基本数据结构: 1.Set 集合 (实际用bool数组代替)用于存放已求得最短路径的顶点 2.dist[] : 存放对应顶点到源点的最短路径,初始态仅源点邻居存在有值, 阅读全文
posted @ 2022-04-29 22:59 秋月桐 阅读(65) 评论(0) 推荐(0)
摘要:时间复杂度:logn 树状数组的唯一作用:快速求前缀和并支持单点修改(增加一个数,或者加当前数相反数,再加自己想修改的数,实现数值替换) 区间修改,单点查询题 需要将原题目差分 区间修改,区间查询。 树状数组公式(最好记忆): C[x]=(x-lowbit(x),x] 区间内数的和 lowbit(x 阅读全文
posted @ 2022-03-29 19:09 秋月桐 阅读(39) 评论(0) 推荐(0)
摘要:蓝桥杯--杨辉三角形 核心:求组合数的方法,找规律 https://www.acwing.com/problem/content/3421/ #include <iostream> #include <cstring> #include <algorithm> using namespace std 阅读全文
posted @ 2022-03-16 15:05 秋月桐 阅读(94) 评论(0) 推荐(0)
摘要:题目:蓝桥杯 --完全平方数 https://www.acwing.com/problem/content/3494/ 一个平方数的本质是成偶数对个的质因子的乘积,不可能存在奇数个质因子 #include<bits/stdc++.h> using namespace std; typedef lon 阅读全文
posted @ 2022-03-15 20:36 秋月桐 阅读(142) 评论(0) 推荐(0)
摘要:二叉树遍历的升级 >对于n叉树遍历,利用栈的处理以及对孩子结点的处理值得注意 https://leetcode-cn.com/problems/n-ary-tree-postorder-traversal/ 后序遍历,迭代方式: class Solution { public: vector<int 阅读全文
posted @ 2022-03-15 20:32 秋月桐 阅读(64) 评论(0) 推荐(0)
摘要:通过二进制枚举子集。利用一个int 变量,循环自增,就可以得到2^n种状态,具有极高的泛用性。 mask = 1 << n 表示 全选的情况下的mask数值+1 和dfs感觉上差不多,都是一种暴力搜索的方式,但是写法相对简单。 https://leetcode-cn.com/problems/cou 阅读全文
posted @ 2022-03-15 20:27 秋月桐 阅读(83) 评论(0) 推荐(0)
摘要:裴蜀定理:任意两个数来组合,必定是其gcd的倍数。 推广:如果求n个数的组合结果集,如果这n个数的gcd不为1,则有无穷个数无法被组合。 gcd=1时,两个数最大不能表示的数是**(a-1)(b-1)-1**; 本题的状态方程和完全背包模板题类似,不过求max变成了 || 。 dp状态表示的是前i类 阅读全文
posted @ 2022-02-27 11:21 秋月桐 阅读(127) 评论(0) 推荐(0)
摘要:用栈解决正则问题: https://www.acwing.com/problem/content/description/1227/ 注意:1.括号中可能有多个 | 2.求max最后还得加上一次 3.count()在主函数中最后要执行一次 ,类似 xxx|xxxx这样的结构可能存在 #include 阅读全文
posted @ 2022-02-25 21:27 秋月桐 阅读(47) 评论(0) 推荐(0)
摘要:树形dp形式上其实是dfs,题目往往给定一个带权值的树,让你求某个属性(max,min),需要保存树的结构并深搜遍历 图的存储通常使用邻接表,用于稀疏图(邻接矩阵用于稠密图) 例题:没有上司的舞会 https://www.acwing.com/problem/content/287/ #includ 阅读全文
posted @ 2022-02-14 16:27 秋月桐 阅读(53) 评论(0) 推荐(0)
摘要:https://www.acwing.com/problem/content/description/1224/ 最长公共子序列问题在《算法导论》P222页有其原理证明。 “比对两段DNA序列的相似度”就是一个很好的例子。 动态规划的核心思想就是自底向上地解决递归中的重复子结构问题。利用空间迭代(或 阅读全文
posted @ 2022-02-10 22:02 秋月桐 阅读(64) 评论(0) 推荐(0)
摘要:地宫取宝 https://www.acwing.com/problem/content/1214/ 1.纯dfs,超时得一半分 #include<bits/stdc++.h> using namespace std; const int MOD=1e9+7; int q[50][50]; int n 阅读全文
posted @ 2022-02-07 22:02 秋月桐 阅读(85) 评论(0) 推荐(0)
摘要:https://www.acwing.com/problem/content/description/1211/ 全排列问题+如何利用全排列插入符号来计算 #include <bits/stdc++.h> using namespace std; const int N=10; int dist[N 阅读全文
posted @ 2022-01-30 12:27 秋月桐 阅读(56) 评论(0) 推荐(0)
摘要:树的直径是求一棵树最远的两点之间的距离。 套路:两次dfs,一次dfs求离根最远的结点A,再以A为根搜索离A最远的结点B,A到B就是树的直径(双向的树) #include<bits/stdc++.h> using namespace std; const int N=100010; int n; s 阅读全文
posted @ 2022-01-28 17:42 秋月桐 阅读(81) 评论(0) 推荐(0)
摘要:y总总结的常用stl用法,在这mark一下,以后不会过来查~ vector, 变长数组,倍增的思想 size() 返回元素个数 empty() 返回是否为空 clear() 清空 front()/back() push_back()/pop_back() begin()/end() [] 支持比较运 阅读全文
posted @ 2022-01-23 21:36 秋月桐 阅读(83) 评论(0) 推荐(0)
摘要:字符串哈希 作用:快速查询子串,极快地比较两个字符串,以及还有其他用途。(比kmp泛用性更广) 原理:1. 将字符串的前缀和字符串数组想办法转换成数字; ​ 2.前缀和字符串数组转换为数字的方式,p进制转化十进制(秦九邵),“1234” > 1p0+2p1+3p^2+..... ​ 在这里使用ASC 阅读全文
posted @ 2022-01-23 11:20 秋月桐 阅读(132) 评论(0) 推荐(0)
摘要:高精度加法 #include<iostream> #include<vector> using namespace std; vector<int> add(vector<int> &A,vector<int> &B){ vector<int> C; int t=0; for(int i=0;i<A 阅读全文
posted @ 2022-01-20 16:43 秋月桐 阅读(98) 评论(0) 推荐(0)
摘要:哈希表分为开放寻址法和拉链法。时间复杂度近似o(1),一般仅进行添加和查找,一般不删除(用数组标记)。 作用是使较大的定义域 映射到一个较小范围的集合 离散化是一种保持有序性的特殊哈希。 x mod 10^5(目标小集合长度,取质数冲突概率小) 冲突处理 拉链法:用邻接表存储,把e[N]拆成很多个链 阅读全文
posted @ 2022-01-20 16:35 秋月桐 阅读(174) 评论(0) 推荐(0)
摘要:https://www.acwing.com/problem/content/839/ #include<iostream> using namespace std; const int N=100010; int n,m; int p[N],cnt[N]; int find(int x){ if( 阅读全文
posted @ 2022-01-17 20:37 秋月桐 阅读(41) 评论(0) 推荐(0)