算法
文章平均质量分 80
小丑小丑小丑
这个作者很懒,什么都没留下…
展开
-
质因数模板,欧拉函数(普通版)模板
质因数 欧拉函数原创 2022-12-13 10:55:18 · 296 阅读 · 0 评论 -
树状数组求逆序对
树状数组求逆序对原创 2022-12-12 16:51:06 · 563 阅读 · 0 评论 -
MAX MIN(LC统计定界子数组个数)
MAX MIN原创 2022-10-16 22:28:02 · 534 阅读 · 0 评论 -
LeetCode314周赛
314周赛原创 2022-10-09 19:43:22 · 192 阅读 · 0 评论 -
找到所有好下标
最长上升连续子序列原创 2022-09-25 19:52:39 · 248 阅读 · 0 评论 -
按位与最大的最长连续子数组
连续区间性质维护原创 2022-09-25 19:16:52 · 298 阅读 · 0 评论 -
leetcode第311场周赛题解
leetcode第311场周赛题解原创 2022-09-18 16:36:28 · 639 阅读 · 0 评论 -
leetcode股票交易系列---状态机相关题目
状态机原创 2022-09-16 10:41:41 · 198 阅读 · 0 评论 -
01,完全,多重,混合,分组背包相关题目
背包学习笔记原创 2022-09-03 16:47:58 · 178 阅读 · 0 评论 -
数字三角形模型相关题目
数字三角形模型相关题目原创 2022-08-24 21:09:09 · 105 阅读 · 0 评论 -
红黑树插入代码实现(框架)
前言:个人观点,所谓手撕红黑树插入,就是记性好而已,理解并背下框架即可。插入代码量在200行左右红黑树特征root是黑色的若一个节点是红色的,则它两个孩子是黑色的。(没有连续的红节点)ps:黑色节点可以连续每条路径的黑色节点数量相等(一条路径指从root到某一个叶子节点)最长路径不超过最短路径的2倍红黑树插入流程这是总体流程,如果可以看着这张图写出红黑树插入,后面就不用看了。ps:强调两点1.插入的节点一定是红颜色的,因为要保证每条路径的黑色节点个数相同,如果插入了一个黑色的节.原创 2022-05-21 08:00:00 · 373 阅读 · 2 评论 -
位图与布隆过滤器
位图位图就是stl里面的bitset。一个位可以记录两个状态。适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。bitset的使用bitset的[]和set,reset都是很好用的接口。[]可以让你快速在某一位中插入一个数字。set可以让你在指定位置中变成1reset可以让你在指定位置中变成0bitset的构造函数要传字符串int main(){ bitset<16> foo("0000000000000000"); foo[1] = 1; foo[原创 2022-05-01 20:19:07 · 483 阅读 · 0 评论 -
哈希表(开散列和闭散列)简易实现
前言:这里是用oop实现的哈希表,实现的很简易,没有实现迭代器等。用于复习这两个散列方式的思想文章目录开放寻址发(闭散列)负载因子仿函数拉链法(开散列)结构负载因子开放寻址发(闭散列)先贴代码:#include <iostream>#include <vector>using namespace std;enum state{ EMPTY, EXIST, DELETE};template<class k, class v>struct .原创 2022-05-01 10:42:11 · 254 阅读 · 0 评论 -
二叉树前中后序遍历(非递归)框架
前言:这个框架是模仿递归的前中后序来写的,应该算是比较好背的框架了文章目录前序遍历中序后序前序遍历框架:写这个框架的时候牢记以下:cur是要遍历所有节点的指针,所有都遍历完之后cur会变长nullptr前序遍历就按照递归的思路写即可。res.push_back(cur->val) 等价于 递归中的操作下面代码等价于preorder(root->left)while(cur){ st.push(cur); cur = cur->left;}.原创 2022-04-28 16:02:36 · 871 阅读 · 0 评论 -
搜索二叉树代码框架(复习)
前言:复习就不想用长篇大论来解释二叉搜索了,尽量用模板化的框架来帮助写二叉搜索的增删改。对于find和insert还是好记得,但是erase确实情况太多,不多写没办法记文章目录迭代版findinserterase递归版findinserterase题目迭代版findfind步骤:比key大往右早,比key大往左找用一个cur指针像遍历链表一样去找找到返回对应的Node总结:根据二叉搜索的性质像遍历链表一样找到对应的节点。代码:node* find(const k& k.原创 2022-04-27 23:17:05 · 1255 阅读 · 0 评论 -
B-树,B+树
B树的孩子有左父亲和右父亲,父亲又有左孩子和右孩子。且一个节点既能做左孩子也能做右孩子,很奇妙的树!文章目录B树规则定义B树的插入过程根据分裂过程记忆性质(重要)B树规则定义一棵M阶(M>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质:1. 根节点关键字的数量是[1,M-1]2. 根节点孩子的数量树[2,M]3. 每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子4. 每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字5. 所有的叶子节点都原创 2022-04-16 11:06:57 · 2128 阅读 · 0 评论 -
LIS和LCSdp分析
文章目录LISLCSLCS状态划分图解(***)下面写的东西理解之后都要背住。LIS最长上升子序列模型一个序列最长的严格单调递增的子序列的最大长度是多少?注:子序列不是连续子序列,可以跳着选数。(这一点和后面的分析强相关)比如12345,135也是它的子序列。开始分析:对于dp方程为什么是这样,很大部分原因是子序列不是连续的,也就是说,以第i个数字结尾的子序列,第i个数字可以不选(当然符合条件的话也是要选的)。因此要全部遍历一遍才可以确定最大值是多少(可以用二分优化复杂度,以后再说)这一原创 2022-04-01 23:17:48 · 243 阅读 · 0 评论 -
整除理论、约数、质数
文章目录整除的基本知识(其实没啥用,太抽象)根号n求约数找最短的循环节这里只讲简单且必须会的东西。深奥的东西不谈。整除的基本知识(其实没啥用,太抽象)注:a|b里面的a是小于等于b的,也就是说b是a的倍数1.整除具有传递性a|b, b|c -> a|c2.若a|b且a|c,那么对于任意的整数x,y,有a|(bx+cy)根号n求约数这也是一个板子,由于约数是成对出现的,因此我们可以枚举到根号n即可。```cpp#include <iostream>using n原创 2022-03-18 10:49:37 · 442 阅读 · 0 评论 -
进制转换与排列组合
文章目录进制转换排列组合排列组合组合数代码进制转换这个题可以当模板背下来了。首先先解决一个问题:如何把1 2 3 4变成十进制的1234.int x = 0;for(int i = 0; i < 4; i++) x = x * 10 + a[i];把这个式子扩展到n,可以得到n进制换成十进制的算式int x = 0;for(int i = 0; i < m; i++) x = x * n + a[i];10进制转化成m进制,可以一直除以m并取余数,直到商为0的时候停止。取余原创 2022-03-16 21:52:15 · 376 阅读 · 0 评论 -
暴力枚举~
统计方形统计方块考点:找规律+循环枚举其实这道题和暴力枚举还没什么关系,关键是要找到规律。模拟几个案例,发现从(1,1)开始枚举每一个点(第一个点是(0,0))正方形数量 = min(i, j)长方形数量 = i * j - 正方形数量把所有点的方形数量加起来就是答案。ac代码:#include <iostream>using namespace std;int main(){ long long n, m, sqr = 0, all = 0; cin >原创 2022-02-27 21:46:04 · 431 阅读 · 0 评论 -
递推与递归
文章目录递推过河卒栈递归数的计算递推过河卒过河卒这道题用dfs和递推都可以。递推的时间复杂度更优一些。这道题的递推式很容易。f[i][j] = f[i-1][j] + f[i][j-1]初始化的时候有点麻烦。1.若马不在第一行或者第一列的时候,正常的处理2.若马在第一行或者第一列的时候,马后面的所有地方都是无法走过去的,即路径数为0.注:这种写法并不好#include <iostream>using namespace std;const int N = 30;原创 2022-02-26 20:10:56 · 204 阅读 · 0 评论 -
简单贪心策略
贪心与证明要选用贪心策略,就要先证明贪心策略是正确的,才能考虑使用。在很多情况下,贪心的合理性并不是显然的,但如果能找到一个反例,就可以证明这样的贪心不正确。部分背包问题部分背包问题当背包问题的物品可以被任意切割的时候,贪心策略是正确的。这很好理解。只要拿单位价值最高的商品,填满袋子就是最优解。ac代码:#include <iostream>#include <algorithm>using namespace std;int n, t;const int N原创 2022-02-25 12:44:31 · 1372 阅读 · 0 评论 -
二分查找与二分答案
文章目录二分模板A-B数对砍树进击的奶牛浮点数二分模板一元三次方程二分模板由于二分不只是简单的查找一个数。它可以用于查找满足性质和不满足性质的分界点的位置。因此在记模板的时候,我们要用性质来解释。二分步骤:1.划分性质2.描述check在符合性质处的代码语句3.确定是否+1举个例子:现在给定一串有序数字,询问n次,分别返回该数字的初始位置和结束位置1 1 1 2 3 3 3 3 5 7 9比如数字3的开始位置是4 和 7(下标从0开始)要二分出来,就必须要找到对应的性质。注:1.划原创 2022-02-22 14:07:53 · 357 阅读 · 0 评论 -
搜索dfs和bfs
文章目录dfs和回溯算法dfs模板四阶数独8皇后kkksc03考前临时抱佛脚bfsbfs模板马的遍历奇怪的电梯流星雨dfs和回溯算法dfs和暴力枚举的区别在于:暴力枚举是把每一种情况都列举出来,不管这个情况是否合理。而dfs是在暴力枚举下的优化算法,它会对一些不符合条件进行去除。(剪枝)dfs模板dfs本质上是一颗递归树,且是深度优先遍历。因此核心就是把每一个分支的空填上void dfs(int k){ if(一个分支结束了) { 判断最优解/记录答案;//判断最优解类似res = m原创 2022-02-20 16:01:14 · 156 阅读 · 0 评论 -
算法之图论
文章目录dfs排列数字八皇后bfs走迷宫的最短路径八数码树和图的遍历树和图的dfs遍历树的重心树和图的bfs拓扑序列最短路朴素dijkstra O(n^2)堆优化dijkstra O(mlogn)Bellman-ford O(nm)spfa求最短路 O(m)spfa求负环 O(mn)floyd O(n^3)最小生成树primkruskal二分图染色法匈牙利算法(相亲算法)dfsdfs最重要的东西就是添加路径,dfs下一层和回退void dfs(路径){ if(路径长度 == 目标长度) {原创 2021-11-27 21:59:34 · 368 阅读 · 0 评论 -
算法模板之数据结构
文章目录1.单链表(数组版)2.双链表(数组版)3.栈和队列4.单调栈和单调队列单调栈单调队列5.KMP6.Trie树7.并查集8.堆9.哈希表(拉链、开放寻址)10.字符串哈希1.单链表(数组版)有几个注意的点:凡是用数组模拟数据结构的,其实就要宏观的想象成指针。比如ne[k] = ne[idx]就相当于k->next = idxidx其实就是当前的节点数,曾经创建过多少节点的意思。注意一点:如果删除了以前的节点,idx是不会–的。空间浪费就浪费了,因为如果要像数组一样挪动数组删除,时间原创 2021-11-21 16:12:55 · 296 阅读 · 0 评论