
算法
文章平均质量分 75
不染_是非
给时光以生命 而不是给生命以时光
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
祖孙询问(倍增法求LCA)(全网最详细)(带图解)
倍增法求LCA的核心思路和步骤通过图片和实例理解起来并不复杂,代码写起来更是很顺畅。如果仍有不理解的地方,欢迎留言或者私信。原创 2025-06-01 01:47:49 · 1145 阅读 · 0 评论 -
AcWing 1081. 度的数量(数位DP,全网带图最详细讲解,包能听懂)
利用前缀和,比如求区间[x,y]中的个数,转化成求[0,y]的个数 减[0,x-1]的个数。利用树的结构来考虑(按位分类讨论)本篇博客把数位DP的一道简单例题给讲解清楚了,如果大家还存在不懂的地方,欢迎留言。原创 2025-05-04 17:55:08 · 1022 阅读 · 0 评论 -
AcWing 1078. 旅游规划(树形DP,全网最详细讲解,包能听懂)
对于树的存储我们采用邻接表来进行存储。原创 2025-03-12 22:02:19 · 687 阅读 · 0 评论 -
AcWing 1243. 糖果(01背包和状态压缩的结合,全网最详细讲解,最容易理解的版本)
相信来看本题题解的小伙伴们都知道什么是01背包和状态压缩dp了,那么话不多说,来看看本题怎么求解的。原创 2025-03-06 21:55:59 · 1075 阅读 · 0 评论 -
AcWing 1264. 动态求连续区间和 ,详细讲解线段树与树状数组(Python,篇二)
顾名思义就是一个结构为树形结构的数组,于二叉树的结构类似但又不同,它是在二叉树的结构上删除了一些中间节点,来看两幅图就明白了.1. 这是二叉树的结构2. 这是树状数组的结构不难发现,树状数组相比于二叉树删除了一些节点,但是为什么要删除呢?这就和树状数组的一些性质(lowbit)有关了,不懂没关系,继续往下看.原创 2025-02-19 21:46:47 · 829 阅读 · 0 评论 -
最长上升子序列 II(包能看懂的版本,小白必看,贪心,python讲解,其他语言均适用)
我的代码可能跟别人比起来不是那么简洁,但是我个人认为还是很好理解的,个人偏向于好理解和好写的代码,而非很简洁的代码。原创 2025-01-27 01:17:29 · 1092 阅读 · 0 评论 -
匈牙利算法(AcWing 861. 二分图的最大匹配)(带图讲解,超详细)
至此为止,图论的所有模板题都已讲完,之后我也会对这些专栏进行整理,后续再写图论的算法题讲解时也会放到对应的算法的专栏里去。撒花🌸🌸🌸。原创 2024-12-12 22:24:11 · 1846 阅读 · 0 评论 -
染色法(AcWing 860. 染色法判定二分图)(带图讲解,超详细)
做本题之前首要要清楚二分图的概念。有两顶点集且图中每条边的的两个顶点分别位于两个顶点集中,每个顶点集中没有边直接相连接!说人话的定义:图中点通过移动能分成左右两部分,左侧的点只和右侧的点相连,右侧的点只和左侧的点相连。原创 2024-12-12 17:31:50 · 1099 阅读 · 0 评论 -
Kruskal算法(859. Kruskal算法求最小生成树)(带图讲解,超详细)
本篇博客学习一下Kruskal算法,它适用于稀疏图解决最小生成树问题,时间复杂度为Omlogm(实际时间小于mlogm。原创 2024-12-11 22:49:10 · 1167 阅读 · 0 评论 -
Prim算法(858. Prim算法求最小生成树,朴素版Prim)(带图讲解,超详细)(带上了保存路径)
本专栏博客将会带大家讲解其中中有两种算法,一种是,Prim算法又分为朴素版的Prim(时间复杂度On2)和堆优化版的Prim(时间复杂度Omlogn)(跟Dijkstra算法分类一样,写法也很类似);另一种是(时间复杂度Omlogm朴素版Prim算法适合用稠密图,而堆优化版Prim和Kruskal算法适合用稀疏图。堆优化版的Prim算法很少用(99%用不到),所以本专栏博客不对其进行讲解。如果对稠密图和稀疏图的概念和构造还不清楚,可以参考和。原创 2024-12-11 18:34:32 · 2401 阅读 · 1 评论 -
Floyd算法(854. Floyd求最短路)
本篇博客就来讲解一下求解多源汇最短路问题中的Floyd算法。什么是多源汇最短路?就是求n个点中任意两点的距离。原创 2024-12-10 17:14:17 · 1081 阅读 · 0 评论 -
spfa算法(AcWing 852. spfa判断负环)(带图讲解,超详细)
在上一篇博客中讲解了SPFA算法,同时也强调了SPFA算法的两个注意事项。⭐️⭐️一般使用SPFA算法,方法是用一个cnt数组记录每个点到源点的边数,一个点被更新一次就+1,一旦有点的边数达到了n那就证明存在了负环。本篇博客就来讲解一下SPFA算法是怎样来判断负环的。原创 2024-12-10 16:19:13 · 1374 阅读 · 1 评论 -
spfa算法(AcWing 851. spfa求最短路)(带图讲解,超详细)
上一篇博客中讲解了最短路问题中单源最短路中存在负权边的Bellman-Ford算法,时间复杂度为Onm。(单源最短路:从1号点到n号点的最短距离)上面这张图讲贯穿我们图论中的最短路问题,大家一定要牢记,这其中的每个算法我都会进行讲解,并放到单独的一个专栏里。本篇博客就来讲解SPFA算法,它是Bellman-Ford算法的优化,在99%的存在负权边的问题里都可以用SPFA来进行求解(大家可以放心大胆的用,除了存在负权回路的问题,这个负权回路在下面会讲)。它可以把时间复杂度优化到Om。原创 2024-12-09 17:56:18 · 1963 阅读 · 0 评论 -
bellman-ford 算法(AcWing 853. 有边数限制的最短路)(带图讲解,超详细)
Bellman - ford 算法是求含负权图的单源最短路径的一种算法,效率较低,代码难度较小。其原理为连续进行松弛,在每次松弛时把每条边都更新一下,若在 n-1 次松弛后还能更新,则说明图中有负环,因此无法得出结果,否则就完成。(通俗的来讲就是:假设 1 号点到 n 号点是可达的,每一个点同时向指向的方向出发,更新相邻的点的最短距离,通过循环 n-1 次操作,若图中不存在负环,则 1 号点一定会到达 n 号点,若图中存在负环,则在 n-1 次松弛后一定还会更新)Bellman - ford 算法。原创 2024-12-07 19:15:37 · 1494 阅读 · 0 评论 -
KMP算法详细讲解(超详细配图讲解,小白也可以听懂)
1024程序员节|征文#前言:本篇博会讲解学习KMP算法中遇到的痛难点问题(如:next数组的定义、如何求解next数组、回溯时为什么要回溯到next[i]、前缀和后缀的概念和求解过程等等),这也是我在学习中遇到的困惑点,由此写下本篇博客,希望对大家有所帮助。老规矩,先由列题来引入知识点。题目:给定一个字符串 S,以及一个模式串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模式串 P 在字符串 S 中多次作为子串出现。求出模式串 P 在字符串 S 中所有出现的位置的起始下标。原创 2024-10-26 18:34:56 · 4159 阅读 · 5 评论 -
AcWing 802. 区间和(离散化算法,python)
本题猛的一看似乎就是一道前缀和的模板题,但需要注意到这里所谓的“坐标”的范围较大,范围在−109≤x≤109−109≤x≤109,为了存下被修改的点的数据,如果将它们的坐标作为数组的下标就需要开一个2∗1092*10^92∗109大小的数组,肯定会爆内存,况且这里的坐标还有负值,不方便进行存储。所以要提出一个新的能方便快捷存数据的算法——离散化。原创 2024-10-09 18:55:59 · 906 阅读 · 0 评论 -
Dijkstra求最短路篇二(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)(超简单的邻接表的构建)
堆优化版dijkstra适合稀疏图堆优化版的dijkstra是对朴素版dijkstra进行了优化,在朴素版dijkstra中时间复杂度最高的寻找距离最短的点O(n^2)可以使用最小堆优化。一号点的距离初始化为零,其他点初始化成无穷大。将一号点放入堆中。不断循环,直到堆空。每一次循环中执行的操作为:弹出堆顶(与朴素版diijkstra找到S外距离最短的点相同,并标记该点的最短路径已经确定)。用该点更新临界点的距离,若更新成功就加入到堆中。时间复杂度分析OnO(n)OnOn。原创 2024-06-01 22:54:46 · 814 阅读 · 0 评论 -
Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)(超简单的邻接矩阵的构建)
Dijkstra求最短路问题是图论的经典问题,首先介绍一下迪杰斯特拉算法采用的是一种贪心的策略。用一个 dist 数组保存源点到其余各个节点的距离,dist[i] 表示源点到节点 i 的距离。初始时,dist数组的各个元素为无穷大。用一个状态数组 state 记录是否找到了源点到该节点的最短距离,state[i] 如果为真,则表示找到了源点到节点 i 的最短距离,state[i] 如果为假,则表示源点到节点 i 的最短距离还没有找到。初始时,state 各个元素为假。源点到源点的距离为 0。原创 2024-06-01 22:54:35 · 1100 阅读 · 0 评论 -
AcWing 846. 树的重心(dfs)(全网最详细讲解)(python版本,其他语言也能听懂)
本题最难理解的还是递归部分了,因为我们做的递归大部分都是在递归前处理数据,如果在递归后处理数据就比较难理解了。递归比较绕,但只要从后往前来推导就比较好理解了。原创 2024-05-29 01:14:24 · 1503 阅读 · 0 评论 -
AcWing 1264. 动态求连续区间和 ,详细讲解线段树与树状数组(Python,篇一)
自己写了半天的博客发现还是水平有限,介绍的知识点不太全面,这里引用一篇其他博主的线段树介绍什么是线段树,介绍的内容很细也很好理解。这里说明一下问什么要开4n倍的数组空间:设最后有n个叶结点,对应的满二叉树最多有2n个叶结点(这是因为极端情况是倒数第二层区间长度1,2交替) 然后根据(2n)+n+n/2…<=4n下面结合具体题目来看看如何用线段树解决实际问题。原创 2024-04-25 21:19:35 · 1092 阅读 · 0 评论 -
AcWing 95. 费解的开关(python超详细讲解)(递推)(位运算)
本题涉及的知识点还是比较广的,难点也比较多,一个是递推的确立,一个是第一行的固定,一个是如何用代码实现第一行的固定,还有一个是python标准库copy的使用(深拷贝与浅拷贝的区别与使用)。原创 2024-04-19 01:21:46 · 949 阅读 · 0 评论 -
python中对列表的复制操作(浅拷贝与深拷贝)
综上所述,path = num[:]和path = num.copy()是浅拷贝操作,会共享内部对象的引用,而path = copy.deepcopy(num)是深拷贝操作,会创建完全独立的副本。根据具体的需求,选择适合的复制方式来确保数据的安全性。使用深拷贝就可以完美解决多维数组中对原数组的保留和修改问题。原创 2024-04-19 00:03:58 · 1961 阅读 · 0 评论 -
X的因子链(数论,python)(算术基本定理)(欧拉筛法)
本题还是比较有难度的,自己也是花费了两小时才搞懂。原创 2024-04-03 01:07:40 · 1006 阅读 · 0 评论 -
线性筛法求素数(欧拉筛法)(求质数,O(n)时间复杂度)(外加求每个整数的最小质因子)(python)
欧拉筛法是很多数论题型解法的“敲门砖”,下篇博客将讲解一道比较难的数论题,该题用到了本篇博客的欧拉筛法和最小质因子求法。原创 2024-04-03 00:02:46 · 1280 阅读 · 0 评论 -
蓝桥杯:大臣的旅费(dfs,bfs,python,树形DP)(树的直径问题)(图的存储之用数组作为邻接表)
本篇博客可以说是上一篇博客的延伸版,上一篇博客全球变暖,讲解bfs和dfs更详细的,本篇博客更多的是邻接表的构建和树的直径问题。原创 2024-03-31 00:27:50 · 1363 阅读 · 0 评论 -
蓝桥杯:全球变暖(python,BFS,DFS)(栈溢出的处理办法)
本题看着很简单,但是统计问题解决实现起来还是有点绕的。原创 2024-03-30 18:41:56 · 1577 阅读 · 2 评论 -
蓝桥:重新排序(差分,python)
本题是第十三届蓝桥杯省赛的题,掌握了差分做起来会发现很简单,用纯暴力做法思考起来也不是很难。原创 2024-03-20 18:15:07 · 1059 阅读 · 0 评论 -
二维前缀和&二维差分(超详细,python版,其他语言也很轻松能看懂)
二维前缀和&二维差分也是竞赛经常考的题型,二维差分的重点在于差分数组的构造和区间的加减的,总结起来就两个公式;;;;两篇博客详细讲解了一维和二维的差分和前缀和,并给出了两种方法的模板题。原创 2024-03-18 23:54:07 · 3002 阅读 · 0 评论 -
一维前缀和&一维差分(下篇讲解二维前缀和&二维差分)(超详细,python版,其他语言也很轻松能看懂)
一维差分 给区间[l,r]中的数加上一个c:b[l] +=c,b[r + 1] -= c前缀和&差分可以说是算法竞赛中必考的知识点,需要熟练掌握。原创 2024-03-18 19:48:35 · 1075 阅读 · 0 评论 -
Acwing:730. 机器人跳跃问题(二分法)
机器人正在玩一个古老的基于 DOS 的游戏。游戏中有 N+1 座建筑——从 0 到 N 编号,从左到右排列。编号为 0 的建筑高度为 0个单位,编号为 i的建筑高度为 H(i) 个单位。起初,机器人在编号为 0的建筑处。每一步,它跳到下一个(右边)建筑。假设机器人在第 k个建筑,且它现在的能量值是 E,下一步它将跳到第 k+1 个建筑。如果 H(k+1)>E,那么机器人就失去 H(k+1)−E的能量值,否则它将得到 E−H(k+1)的能量值。原创 2024-03-17 22:53:49 · 544 阅读 · 0 评论 -
蓝桥:保险箱(Python,动态规划)
省赛10分的题,结果写了半天ac了25%,拿了3分,之后看到类似的题分析到状态就要考虑是否能用dp来解决。原创 2024-03-17 00:35:25 · 1503 阅读 · 0 评论 -
奇怪的比赛(Python,递归,状态压缩动态规划dp)
状态压缩dp还是比较难的,但把dp的定义吃透就比较好理解了。原创 2024-03-16 21:37:56 · 1271 阅读 · 1 评论 -
蓝桥:管道(python,二分法,区间合并)
复盘一遍后发现本题其实并不难,但是这个二分思想说实话很难想到。原创 2024-03-16 16:15:16 · 1198 阅读 · 0 评论 -
蓝桥:硬币兑换(python)
小蓝手中有2023种不同面值的硬币,这些硬币全部是新版硬币,其中第i(1≤i≤2023)种硬币的面值为i,数量他为i个。硬币兑换机可以进行硬币兑换,兑换规则为:交给硬币兑换机两个新版硬币coin1和coin2,硬币兑换机会兑换成一个面值为coin1十coin2的旧版硬币。小蓝可以用自己有的硬币进行任意次数兑换,假设最终小蓝手中有K种不同面值的硬币(只看面值, 不看新旧) 第i(1≤i≤K)种硬币的个数为sumi。小蓝想要使得。原创 2024-03-16 14:17:10 · 1661 阅读 · 7 评论 -
力扣:42. 接雨水 & 84.柱状图中最大的矩形(单调栈,双指针)
这两道题解题思路类似,一个是单调递增栈,一个是单调递减栈。本篇博客给出暴力,双指针和单调栈解法。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:输出:解释:示例 2:输入:输出:提示:本题暴力解法也是也是使用双指针。首先要明确,要按照行来计算,还是按照列来计算。按照行来计算如图:按照列来计算如图:按照列来计算,比较容易理解,接下来看一下按照列如何计算。首先,如果按照列来计算的话,宽度一定是1了,我们再把每一列的雨水的高度求出来就可以了。原创 2024-02-05 15:15:01 · 1117 阅读 · 0 评论 -
动态规划之买卖股票问题(篇三)(买卖股票的最佳时机)
别忘了状态四,状态四是冷冻期,最后一天如果是冷冻期也可能是最大值。原创 2024-01-30 18:19:50 · 887 阅读 · 0 评论 -
动态规划之买卖股票问题(篇二)(买卖股票的最佳时机)
本篇博客主要讲解和,是上篇博客中股票问题的进阶。原创 2024-01-26 21:40:25 · 1104 阅读 · 0 评论 -
动态规划之买卖股票问题(篇一)(买卖股票的最佳时机)
本篇博客和接下来的几篇博客主要讲解一下中的,本篇博客主要讲解和。原创 2024-01-26 00:39:34 · 1224 阅读 · 0 评论 -
打家劫舍系列(三合一)(动态规划)
打家劫舍系列跟背包问题比起来还是比较简单和好理解的劫舍系列简单来说就是 数组上连续元素二选一,成环之后连续元素二选一,在树上连续元素二选一,所能得到的最大价值。原创 2024-01-23 15:37:42 · 1155 阅读 · 0 评论 -
动态规划:完全背包问题
本题力扣上没有,是刷的卡码网第52题感兴趣的小伙伴可以去刷一下,是ACM模式。原创 2024-01-20 22:19:46 · 920 阅读 · 0 评论