- 博客(15)
- 收藏
- 关注
原创 树与图的存储与遍历
树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。因此我们可以只考虑有向图的存储。(1) 邻接矩阵:g[a][b] 存储边a->b 存储稠密图(2) 邻接表: 存储稀松图。
2024-03-11 21:11:33
387
1
原创 将二维字符数组输出为一维字符串
我们要注意开数组的时候要多开,比如开成 g[N][N] , N =4;但是假如横向或者纵向输入满了就不行了,比如。并使每行的三个字符组合成字符串输出(
2024-03-11 17:06:34
451
1
原创 DFS、BFS
我们每个点都是同时向外拓展一步,并且只拓展一次。那么我们将其速度看作1步/次。每个点都向外探索一次。那么此时我们的次数可以类比为时间,由此每条路的速度和时间都是一样的,因此每条路的路程都是一样的。而各个点都是从起点开始扩散的。我们看下面的例子:某时刻,绿色线到达了B点,此时各个路线的长度都是L,那么接下来再走的话,蓝色线的路程和黄色线的路程只会更长,因此其再到达B点的时候,必不如绿色线近。因此,第一次到达某个点的路线,就是最短的路线。
2024-03-05 20:31:04
910
原创 质数、质因数
概念:(1)质数(素数):一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。(2)质因数:指能整除给定正整数的质数。质数给定 n 个正整数 ai,判定每个数是否是质数。
2024-02-27 20:51:42
1512
原创 堆(手写小根堆)
若一棵二叉树至多只有最下面两层的结点的度数可以小于2,并且最下层的结点都集中在该层最左边的若干位置上,则此二叉树为完全二叉树。将节点上(up函数)下(down函数)移动,保证每个节点都小于等于左、右儿子,根节点为整个数据结构的最小值。此外,操作down()和up()都跟堆的层数有管,故这两种操作的时间复杂度都为O(logn)。(1)小根堆:每个点都小于等于左、右儿子,根节点为整个数据结构的最小值。(2)大根堆:每个点都大于等于左、右儿子,根节点为整个数据结构的最大值。第二行包含 n 个整数,表示整数数列。
2024-02-07 10:53:44
1012
1
原创 KMP字符串(算法)
其中1串为[ 1, next[ j ] ],3串为[ j - next[ j ] + 1 , j ]。刚开始可能s[i]和P[j + 1](因为j的初始值为0,但是要注意字符串P和S排序都是从1开始的)一直不一样,那么j保持为0,i递增,直到s[i]第一次等于P[j + 1]。对next[ 3 ] :前缀 = { a , ab }—————后缀 = { c , bc}—————next[ 3 ] = 0;对next[ 1 ] :前缀 = 空集—————后缀 = 空集—————next[ 1 ] = 0;
2024-02-03 15:35:23
880
1
原创 链表(用数组模拟单链表和双链表)
单链表——>邻接表——>存储树和图··双链表——>优化某些问题用数组模拟链表会更快单链表 = 数据 + 指针通常会用头指针来标识一个单链表,头指针为NULL时表示一个空表。但是,为了操作方便,会在单链表的第一个结点之前附加一个结点,称为。头结点的数据域可以不设任何信息,也可以记录表长等信息。头结点的指针域指向线性表的第一个元素结点。如下图所示:头结点和头指针的区分:不管带不带头结点,头指针始终指向单链表的第一个结点,而那么单链表的初始化操作就是申请一个头结点,将指针域置空。
2024-02-01 11:05:56
1817
1
原创 双指针算法(最长连续不重复子序列)
i < n;i ++ )// 具体问题的逻辑常见问题分类:(1) 对于一个序列,用两个指针维护一段区间(2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作算法思路:先通过暴力算法找到解题思路,接着观察 i 和 j 之间的单调关系,利用单调关系,可以将枚举的数量从 n^2 变成 n ,时间复杂度从O(n^2 )变成O(n)。给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。
2024-01-27 21:43:33
428
原创 前缀和与差分
输入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1)和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。首先让差分 b 数组中的 b[l] + c , a 数组变成 a[l] + c ,a[l+1] + c,,,,,, a[n] + c;然后我们打个补丁,b[r+1] - c , a 数组变成 a[r+1] - c,a[r+2] - c,,,,,,,a[n] - c;
2024-01-27 17:42:21
903
原创 高精度(加法&减法&乘法&除法)
数组为了进位表示方便,故将大整数的个位、十位、百位、千位、、、依次存入数组的第0、1、2、3、、、位中。(数组在末尾添加新的数比较简单运用pushback)具体在题目中可以用来存储大整数,因为自带函数,可以求长度。
2024-01-25 22:08:47
952
1
原创 二分(整数二分&浮点数二分)
两种模板其实记忆方法也很简单,首先都设置变量int mid = l + r >> 1,接着,根据 if 判断后,自己分析并写出 l / r 的改变,假如有 - 1,则mid = l + r >> 1要再 + 1,即改为 mid = l + r + 1 >> 1;故这两个整数二分的模板都一定会产生结果,但是产生的结果并不一定是正确结果,需要进行判断结果是否满足题意,否则为错误结果,即该题无解。总之,要比保留的小数多2。(没有单调性,也有可能可以二分),二分的本质并不是单调性,单调性和二分没有直接的关系。
2024-01-25 13:26:50
1845
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人