数据结构与算法
文章平均质量分 79
李昌晋
蓝桥云课业务合作、校蓝桥杯授课讲师、天梯赛教练
展开
-
数位dp
数位dp往往都是这样的题型,给定一个闭区间lr,求这个区间中满足某种条件的数的总数。 考虑人类计数的方式,最朴素的计数就是从小到大开始依次加一。但我们发现对于位数比较多的数,这样的过程中有许多重复的部分。例如,从7000数到7999、从8000数到89994、和从9000数到9999的过程非常相似,它们都是后三位从000变到999,不一样的地方只有千位这一位,所以我们可以把这些过程归并起来,将这些过程中产生的计数答案也都存在一个通用的数组里。原创 2024-08-10 15:36:42 · 850 阅读 · 0 评论 -
区间dp
dpdpdp 区间dpdpdp就是在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的 最优解进而得出整个大区间上最优解的dpdpdp算法。原创 2024-08-10 15:36:00 · 614 阅读 · 0 评论 -
树型dp
树型dp即在树上进行dp。 树是无环图,顺序可以是从叶子到根节点,也可以从根到叶子节点。 一般树型dp的特征很明显,即状态可以表示为树中的节点,每个节点的状态可以由其子节点状态转移而来(从叶子到根的顺序),或是由其父亲节点转移而来(从根到叶节点的顺序),也可是两者结合。 找出状态和状态转移方程仍然是树型dp的关键。原创 2024-08-10 15:35:15 · 544 阅读 · 0 评论 -
线段树
线段树,是一种 二叉搜索树。它将一段区间划分为若干 单位区间 ,每一个节点都储存着一个区间。它功能强大 ,支持区间求和,区间最大值,区间修改,单点修改等操作。线段树的思想和分治思想很相像。线段树的每一个节点都储存着一段区间LRL...R的信息,其中叶子节点LRL = RLR。它的大致思想是:将一段大区间平均地划分成222个小区间,每一个小区间都再平均分成222个更小区间……以此类推,直到每一个区间的LLL等于RRR(这样这个区间仅包含一个节点的信息,无法被划分)。原创 2024-08-10 15:34:19 · 852 阅读 · 0 评论 -
树桩数组
可以解决大部分基于区间上的更新以及求和问题。原创 2024-08-10 00:49:35 · 744 阅读 · 0 评论 -
动态规划
2.每一件物品都有无限个,其实并不是无限个,因为背包的容量是有限的,即每一件物品的最多数量为。 2.求这一个上下区间内的最大连续子段和,也就是找上下区间固定的所有子矩阵的最大连续和;行的元素和,那么便可以通过前缀和数组获得到任意上下区间中的元素和,也就变为了一维问题;件物品,在背包容量为(放入这件物品后剩余大小)时能取到的最大价值,两个取最大值;背包的基础上增加了每一件物品的数量,并且数量是指定的;数组中的最大值,便是此序列的最长上升子序列长度;的值,但是因为内层循环是从小到大的,所以在用到。原创 2024-08-09 16:36:30 · 1015 阅读 · 0 评论 -
并查集
2.每当两个点连接时,都可以将其中一个点的。值,表示此两点的上一层相同——两个点为同一整体; 思路:在普通并查集的基础上还需要记录长度。 1.在普通并查集的基础上进行完善,如果。的大小需要为普通并查集的二倍,前半部分表示。值都相同,他们都在同一个整体中; 3.每次连接时,必须将。一定在一起,否则,有人说谎; 1.种类并查集,如果。过程中连接过得所有点的。在一起,两个内容都进行。 1.用一个数组。原创 2024-08-09 16:34:15 · 804 阅读 · 0 评论 -
图
1.无向图的邻接矩阵一定是一个对称矩阵(即从矩阵的左上角到右下角的主对角线为轴,右上角的元与左下角相对应的元全都是相等的)。思路:将图的存储结构使用边集数组的形式表示,并将边集数组按权值从小到大排序,遍历边集数组,每次选取一条边并判断是否构成环路,不会构成环路则将其加入最小生成树,最终只会包含。 2.接下来,从最短距离开始,如果此路的起点和终点在一个整体中,便不对此边进行操作,否则,选择此条边,并更改。的顶点的时候,都要将符合条件的边进行遍历,当边较多的时候,该循环会带来较大的时间复杂度。原创 2024-08-09 16:32:28 · 1274 阅读 · 0 评论 -
树
树(TreeTreeTree)是nnnn≧0n ≧ 0n≧0)个结点的有限集。n0n=0n0时称为空树。在任意一颗非空树中:有且仅有一个特定的称为根的结点。当n1n>1n1时,其余结点可分为mmmm0m > 0m0) 个互不相交的有限集T1T1T1T2T2T2T3T3T3……、TmTmTm,其中每个集合本身又是一棵树,并且称为根的子树。 二叉树是nnnn0n>=0n>=0。原创 2024-08-09 16:31:11 · 594 阅读 · 0 评论 -
搜索
BFS。原创 2024-08-09 16:25:49 · 978 阅读 · 0 评论 -
快速幂
这样不仅能把非常大的指数给不断变小,所需要执行的循环次数也变小,而最后表示的结果却一直不会变。 6.此时,发现指数又变成了一个奇数1,按照上面对指数为奇数的操作方法,应该抽出了一个底数的一次方,这里即为。,用一次(底数做平方操作)的操作减少了原本一半的循环量,特别是在幂特别大的时候效果非常好,例如。又能够在执行“缩指数”操作了,把指数缩小一半,底数执行平方操作。,尽量想办法把指数变小来,这里的指数为10。,底数只是做了一个小小的平方操作,而指数就从。 5.把指数缩小一半,底数执行平方操作,原创 2024-08-09 16:22:17 · 515 阅读 · 0 评论 -
数据结构基础
但是,数组最大的缺点就是我们的插入和删除时需要移动大量的元素,所以呢,大量的消耗时间,以及冗余度难以接收。 队列这种数据结构非常容易理解,就像我们平时去超市买东西,在收银台结账的时候需要排队,先去排队的就先结账出去,排在后面的就后结账,有其他人再要过来结账,必须排在队尾不能在队中间插队。 1.如果一个数先移动到最左边,再移动到最右边,那么最后输出的时候这个数一定是在最右边,也就是一个数最终出现在哪里,以他最后一次出现为准; 5.输出时,先输出队列中的元素,然后将。从原位置删除,为了便于获取。原创 2024-08-09 16:20:58 · 894 阅读 · 0 评论 -
排序算法
3.然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。 2.将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。 思路:先把数组从中间分成前后两部分,然后分别对前后两部分进行排序,再将排好序的两部分数据合并在一起。 思路:将排序的区间分成若干个有跨度的子区间,对每一个子区间,进行插入排序,跨度不断。原创 2024-08-09 16:17:29 · 240 阅读 · 0 评论 -
字符串基础
当然只要不影响原字符串本身的符号(即不在原来的字符串中出现)都是可以的。算法是一种纯暴力的字符串匹配算法,比较符合人类自然思维方式的方法,即对源字符串和目标字符串逐个字符地进行比较。算法过程,不断的比对,直到在主串中找到目标串或者,遍历完目标串。表示第二行的字符串向右移动的格数,如果移动后,第二行的字符串与第一行字符串对应位置的字符全部相同,则。 **字符串前缀:**符号串左部的任意子串(或者说是字符串的任意首部),在。 **字符串后缀:**符号串右部的任意子串(或者说是字符串的任意尾部),在。原创 2024-08-09 16:11:45 · 947 阅读 · 0 评论 -
约数
思路:将这个区间中的每一个数都根据唯一分解定理进行拆分,统计有多少个数的拆分结果为。是多少,这个方法结果正确,但是时间复杂度会比较高,所以借助二分,去找到结尾有。 1.根据唯一分解定理可知:每一个数都可以写为。,二分结果后,还需要判断它是否确实能拆分出。 5.用二分去查找,就必须做到:已知。的存在,那么这个数分解后一定有。 2.如果一个数的结尾有。每隔两个数就会最少出现一个,个数,最少出现一个),那么,,判断这些数可以拆分出几个。为例,因为每五个数才拆分出。,将每一个数都分解后,原创 2024-08-09 16:09:49 · 610 阅读 · 0 评论 -
日期+星期模拟
【代码】日期+星期模拟。原创 2024-08-09 16:03:36 · 344 阅读 · 0 评论 -
素数 判断 筛法
首先,0 和 1 不是素数,然后 i 从 2 开始判断 i 是不是 n 的因数,如果是因数,则直接返回 n 不是素数,否则,判断 i+1 是不是 n 的因数,直到 的时候,如果 i 仍然不是 n 的因数,那么 n 就是素数。欧拉筛法是将目前已经找到的每一个素数的 i 倍标记为合数,无论 i 是否是素数,同时,如果 i 本身就是素数的倍数,那么就去执行下一个 i。注:如果一个数 a 能够整除 i ,那么 i 和 a/i 一定满足:假设 i<=a/i , 那么 i<=√n && a/i>= √n。原创 2024-08-09 16:02:20 · 382 阅读 · 0 评论 -
二分算法
流程: 首先需要估计答案的上下界,然后不断取区间中点进行验证(这就要求答案的验证应当简单可行),并通过验证结果不断更新答案区间,最终得到答案。不难看出,朴素的枚举验证时间复杂度是。特征: 1.答案具有单调性 2.二分答案的问题往往有固定的问法,比如:令最大值最小(最小值最大),求满足条件的最大(小)值等。定义: 二分答案是指在答案具有单调性的前提下,利用二分的思想枚举答案,将求解问题转化为验证结果。原创 2024-08-09 15:57:09 · 187 阅读 · 0 评论 -
位运算
若 m 为 2 的 x 次方 : m 的二进制只有最高位为 1 ,其余全为 0 ,(m-1) 的二进制除最高位都为 1.奇数:二进制最后一位一定为 1 偶数:二进制最后一位一定为 0。按位异或:相同为 0,不同为 1。原创 2024-08-09 15:55:14 · 200 阅读 · 0 评论 -
最大公约数、最小公倍数
【代码】最大公约数、最小公倍数。原创 2024-08-09 15:51:38 · 96 阅读 · 0 评论