- 博客(14)
- 收藏
- 关注
原创 数学知识集锦
我们知道如果a对p取模,只要满足a p互质就有逆元,满足p是质数就能用费马小定理,也就是可以用快速幂求解,题目中是对一个很大的·质数取模所以满足条件,如何对阶乘求逆元,这里用了一个递推式,相当于对i求逆元再和i-1的阶乘的逆元相乘。有一个细节,i开始筛的时候是从i*i开始的,比如此时i=3,遍历筛倍数就从9开始,9,12,15...,可以降低重复。x是i的约数,那么i/x也是i的约数,我们循环的时候可以一起加入约数集合,这样可以只循环根号n。其中每个质数都是这个合数的因数,叫做质因数。
2025-04-02 20:33:47
1055
原创 线性DP--3.30
状态划分为1维,集合表示为以第i个数结尾的上升子序列,状态计算的集合划分可以以该子序列的倒数第二个数为哪个进行划分(不一定全部存在)当扫描到4的时候 我们添加长度,序列长度为3的上升子序列末尾是4 (1 2 4)当扫描到4的时候,我们知道,序列长度为2的上升子序列末尾元素是4(1 4)当扫描到3的时候,我们将序列长度为2的上升子序列末尾元素改为3 (1 3)当扫描到2的时候我们将序列长度为2的上升子序列末尾元素改为2 (1 2)当扫描到1的时候,我们知道,序列长度为1的上升子序列末尾元素是1。
2025-03-31 10:48:01
632
原创 动态规划学习---背包问题
2025---3.27,背包问题专练DP问题的分析我们采用特定的方法这个分析方法我们可以专门来学习一下链接:https://www.bilibili.com/video/BV1X741127ZM。
2025-03-30 17:09:50
653
原创 树和图的存储
邻接矩阵(少)(用2维数组q[a][b]代表a到b之间有一条边,适合稠密矩阵而且不能存储重边)和邻接表(类似哈希表里的拉链法),如图。图分为有向图和无向图,对于无向图我们可以看做有向图的拓展,比如有向图 a 和b 直接有通路。为每个点开了一个单链表,如果想开一个新的边,通常在头部插入(因为有一个头结点数组,方便)我们存储 a到b 无向图只要同时存储 a到b和b到a就行。树是一种特殊的图--无环联通图。所以我们只要考虑图的存储。所以我们只需要研究有向图。有向图的存储一般有两大类。
2025-03-22 20:27:32
188
原创 查缺补漏--3.22
很久没有认真写算法了,最近状态低迷,学校发了几个比赛通知,但是算法没怎么学都没参加,是时候认真赶紧学完基础课了简单来说under_map, 就是存储键值对,并且因为底层是哈希表,所以存储的键值对是无序的,这样也导致查询更快。
2025-03-22 20:26:24
296
原创 并查集+堆排序
那么这样是否会有问题呢,我们看看上浮的路径,如果该节点要上浮,那么就是与他的父节点进行交换,而这个父节点一定小于,已经存在或者不存在的左孩子,也就是说交换后原父节点的位置变成了这个数,父节点位于左孩子处,或位于右孩子处,但左孩子会比父节点大,然后如果这个节点还要继续上浮,那么就会交换一个原来父节点的父节点下来,这个点比父节点小,一定也比现在的左孩子小,所以直接满足条件,一直往上上浮同理。具体思路是在数组最末端添加一个数,然后这个数要与自己的父节点(i/2)比较,如果小于父节点就与父节点交换,然后递归处理。
2025-03-11 19:22:33
889
原创 详解滑动窗口以及KMP算法
重新梳理一下,首先我们怎么模拟这个滑动窗口(大小为k),滑动窗口的尾端是从头到尾遍历数组的,所以我们在最外面设置循环从i到n,滑动窗口的头怎么模拟呢,实际上,我们并没有模拟滑动窗口头部的移动,但是每次i往后移,也就是往窗口里添加元素的时候,都会判断一下,此时的最小值是否出了窗口,也就是说,我们只关心当前答案是否出了窗口,因为,对于我们的输出来说,只需要确定最小值是否出窗口,如果出了最小值就要更换,如果没出,接下来都输出这一段最小值,我们再结合图表理解一下。
2025-03-07 17:00:45
1000
原创 模拟链表+模拟栈+模拟队列+单调栈
2025.3.6单链表用指针加结构体实现链表 例如int val;//这个操作非常慢面试常问,笔试基本不用用数组模拟链表,单链表里,常用的是邻接表,用来存储图和树,双链表常用来优化某些题单链表的结构 如图有一个头结点,头结点初始指向空集,每个节点存储自己的值和next指针用数组模拟的话,需要两个数组,e[N],ne[N];表示值和next,他们之间通过数组下标关联起来,空节点下标用-1表示。
2025-03-07 09:45:15
810
原创 双指针-三个例题
首先,无论数据是否有唯一解,相加等于一个定值都是,一个从最小的往最大的移动,一个最大的往最小的移动,如果有唯一解,可以在找到这个解之后直接退出循环,如果没有说唯一解,可以在遍历完其中一个数组之后结束循环。比较简单的想法,创建一个动态数组,然后每次j往后走就遍历数组,如果没有重复的就继续往后走,并且将当前元素加入动态数组,如果重复了,就结束遍历,i从下一位开始。具体思路就是,i指向数组a的最小值,j指向数组b的最大值,判断指向的两个数的和,如果大于x,j往前移,如果小于x,i往后移。
2025-03-04 20:58:11
580
原创 浮点数二分+vector基础+高精度加减+前缀和与差分
假设上面是原矩阵下面是差分矩阵,下面矩阵蓝色部分的和等于原矩阵蓝色部分 ,假设差分矩阵的某个位置加上了c例如绿色部分,那么由差分矩阵构建原矩阵时,会发现,差分矩阵绿色的部分会把(3,4)囊括进去,直观的说,就是右下角部分,那么对于原矩阵,原矩阵绿色部分都会加上这个数c。高精度减法的思路和加法类似,不过是需要向上借位,借位操作很简单,同样用t表示,最多借一位 0-9+10=1,流程只需要正常减,如果得出来是负数就加10,且t=1,下一位减的时候要多减1。
2025-03-03 21:14:54
1295
原创 详解整数二分
这个时候来考虑mid的情况,是否需要+1,边界值分析考虑极端情况,假设只剩下两个数,(l+r)/2=l,即mid=l,另一种情况是l=r,如果mid=(l+r)/2,此时求mid=l,若符合条件,更新l=mid,新的l和r不变,陷入死循环,当然,如果只剩下两个点,左边的点一定是符合条件的,所以一定会陷入死循环。记忆:如果边界条件是 l=mid,r=mid-1,那么mid=(l+r+1)/2,就是有三个式子里有一个+1,或者,有一个-1,就有一个+1;
2025-03-02 01:48:46
923
原创 C++基础语法+快排+第k个数+归并+逆序对
2025.2.28---打卡第一天,开始学习算法准备机试和蓝桥杯算法学习计划--acwing基础题加LeetCode hot100本人算法小白,仅在一年前准备蓝桥杯时学过半个多月算法,帖子仅仅用来复盘和监督 有兴趣的朋友可以一起交流,相互监督。
2025-02-28 21:19:33
706
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人