算法(我一生之敌)
文章平均质量分 80
算法小白学习算法的过程,非天赋型选手,按照基础算法、回溯、贪心、DFS/BFS、图论、总结了力扣、代码随想录、acwing等常见刷题平台的典型例题,同时有对应博客PDF版的笔记,订阅专栏后可私信免费获取,还有其他学习算法过程的笔记
好喜欢上学
hbu保研buaa&zgca,在这里记录日常学习笔记~谢谢每一个对内容感兴趣的uu的点赞收藏和关注,会看私信。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何看程序的时间复杂度?
程序=数据结构+算法(such as数组/链表),数组:因为需要一段连续的内存空间,所以,查询比较方便【直接通过下标查询】,增删不方便,很麻烦,增加的时候需要移动;删除的时候也不能删除某个空间,只能做覆盖操作链表:存储地址不连续,插入新元素/删除很方便,所以如果数据需要大量做增删操作,需要用链表算法:解决问题的方案算法好坏的评判标准是什么?一般不会考虑空间复杂度【空间嘛,多买内存条/4G卡这些就好啦】,所以更看重时间复杂度;时间复杂度是 数据总量n和计算次数y之间的关系式。原创 2025-05-06 13:49:32 · 422 阅读 · 0 评论 -
最小生成树-prim、kruskal算法
学习之前建议温习一下迪杰斯特拉算法和并查集~先简单认识下最小生成树:最小生成树是,即:以最小的成本(边的权值)将图中所有节点链接到一起。图中有n个节点,那么一定可以用n-1条边将所有节点连接到一起。那么就是最小生成树算法的任务所在。下面我们以一道模板题来讲解如何解决这个问题~~原创 2025-04-24 17:33:31 · 826 阅读 · 0 评论 -
数据结构--并查集-高效处理连通性问题
首先要知道并查集可以解决什么问题呢?当我们需要判断两个元素是否在同一个集合里的时候,我们就要想到用并查集。如何将两个元素添加到一个集合中?将三个元素A,B,C (分别是数字)放在同一个集合,其实就是将三个元素连通在一起,如何连通呢。这样就表述 A 与 B 与 C连通了(有向连通图)。其实就是默认自己指向自己,所以如何判断两个元素是否在同一个集合里?如果通过。原创 2025-04-18 22:27:22 · 787 阅读 · 0 评论 -
图论-BFS搜索图/树-最短路径问题的解决
也有一些问题是广搜 和 深搜都可以解决的,例如岛屿问题,这里我们记dfs的写法就好啦。最短路问题也是之前认真学过的,看这两篇就可以了!广搜的搜索方式就适合于解决两个点之间的。原创 2025-04-15 15:19:45 · 491 阅读 · 0 评论 -
图论--DFS搜索图/树
本节专门讲解dfs在图上的应用,需要做的就是① 明确图的存储结构(邻接矩阵、邻接表),② 背模版 ③ 刷题。原创 2025-04-15 15:14:25 · 1230 阅读 · 0 评论 -
回溯--一种暴力搜索算法
简单了解下回溯?回溯是递归的副产品,只要有递归就会有回溯。,如果想让回溯法高效一些,可以加一些的操作,但也改不了回溯法就是穷举的本质。什么是组合,什么是排列?之前在dp(上)中遇到过求组合数/排列数的两种题型,。例如:{1, 2} 和 {2, 1} 在组合上,就是一个集合,因为不强调顺序,而要是排列的话,{1, 2} 和 {2, 1} 就是两个集合了。组合无序,排列有序。如何理解回溯法?回溯法解决的都是在集合中递归查找子集,。原创 2025-04-24 20:07:00 · 1103 阅读 · 0 评论 -
动态规划dp专题-(下)
这需要根据问题的特点来确定,常见的划分方式是在区间内选择一个分割点k,将区间[i, j]分成[i, k]和[k + 1, j]两个子区间。dp[0][0]表示第0天持有股票,此时的持有股票就一定是买入股票了,因为不可能有前一天推出来,所以。①dp含义:dp[i][j] --第i天的状态为j,所剩下的最大现金是dp[i][j],区间dp的入门题,自己写的时候忘了初始化dp[l][r] 为一个很大的值了。dp[i][j],第i天状态为j,所剩的最多现金为dp[i][j]。表示第i天不持有股票所得最多现金。原创 2025-04-24 20:09:55 · 676 阅读 · 0 评论 -
动态规划dp专题-(上)
第i个数的斐波那契数值是dp[i]②。原创 2025-04-08 19:58:07 · 751 阅读 · 0 评论 -
贪心算法~~
目录一、理论基础二、题目练习(1)455. 分发饼干(2)53. 最大子数组和 - 力扣(3)122. 买卖股票的最佳时机 II - 力扣(LeetCode)(4)860. 柠檬水找零 - 力扣(LeetCode)(5)905. 区间选点 - AcWing题库 (6)AcWing 908. 最大不相交区间数量 (7)906. 区间分组 - AcWing题库 (8)907. 区间覆盖 - AcWing题库 (9)148. 合并果子 - AcWing题库 (10)913. 排队打水 - AcWing题库(11)原创 2025-04-25 17:09:17 · 817 阅读 · 0 评论 -
priority_queue 优先队列
优先队列是一种特殊的队列,它能够保证每次取出的元素都是当前队列中优先级最高的元素。而堆(Heap)是实现优先队列的一种高效方式,常见的堆有大根堆(最大堆)和小根堆(最小堆)在 C++ 中,我们可以使用轻松实现小根堆和大根堆。小根堆(每次弹出最小的数):默认情况下,是大根堆,要实现小根堆,我们需要使用作为比较函数。大根堆(每次弹出最大的数):// 默认是大根堆。原创 2025-03-01 12:23:41 · 356 阅读 · 0 评论 -
哈希-一种数据结构
哈希表是根据关键码的值而直接进行访问的数据结构,比如数组,其实就是一张哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素,如下图所示:一般哈希表都是用来快速判断一个元素是否出现集合里。原创 2025-04-11 15:38:48 · 1107 阅读 · 0 评论 -
前缀和-求解区间和问题(优化算法)
则题目AC代码为:(0_based索引)int main()int n;cin>>n;//前缀和数组i<=n;cin>>x;//查询int a,b;return 0;前缀和常用来作为优化算法,注意数组的存储是0_based索引还是1_based索引!①先计算前缀和i <= n;i++)②查询:对于每次查询,只需执行sum[r] - sum[l - 1] ,时间复杂度为O(1)//1_based索引//0_based索引。原创 2025-03-31 10:38:32 · 271 阅读 · 0 评论 -
双指针算法(快慢指针/对撞指针法)
双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。最常见的双指针算法有两种:一种是,在一个序列里边,用两个指针维护一段区间;另一种是,在两个序列里边,一个指针指向其中一个序列,另外一个指针指向另外一个序列,来维护某种次序。这个题目暴力的解法就是两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组。题目还是比较难想的········在每一步,计算窗口的大小(即。,保持记录最大长度的值。原创 2025-03-29 19:39:50 · 886 阅读 · 0 评论 -
二分查找【看了包会】
①先定义left right 【区间的定义】②进入循环 【注意循环条件】③将target 与 nums[middle] 进行比对,结合①对区间的定义 更新左右区间 【主体部分】原创 2025-03-29 16:13:11 · 888 阅读 · 0 评论 -
最短路径题目练习
结合了一点数学思维。掌握了求最大公因数、最小公倍数、判断质数的数学知识,自己没想到的点是使用Floyd算法一次性计算。完整代码 (滚动数组优化后的)个元素的存储空间,按每个元素8字节(还要将朴素的O(N²)搜索改为。)计算,总内存需求约为。,远超任何合理内存限制。使用邻接矩阵存储的代码。原创 2025-03-28 17:16:23 · 432 阅读 · 0 评论 -
图论--最短路问题总结
(除非 源点特别少,且边都是正数,那可以 多次 Dijkstra 求出最短路径,但这种情况很少,一般出现多个源点了,就是想让你用 Floyd 了)至此已经讲解了三大最短路算法,分别是D。(松弛n次,看看距离数组是否发生变化)原创 2025-03-23 10:47:42 · 405 阅读 · 0 评论 -
Floyd 算法--多源最短路
我们是把 k =0 的 i 和j 对应的数值都初始化了,这样才能去计算 k = 1 的时候 i 和 j 对应的数值。grid[i][j][k] = m,表示 节点i 到 节点j 以[1...k] 集合为中间节点的最短距离为m。你可以反过来想,节点i 到 节点j 中间一定经过很多节点,那么你能用什么方式来表述中间这么多节点呢?节点i 到 节点k 的最短距离 不经过节点k,中间节点集合为[1...k-1],所以 表示为。,同理节点k 到 节点j 的最短距离 也是不经过节点k,表示为。节点i 到 节点j 的。原创 2025-03-21 20:35:45 · 748 阅读 · 0 评论 -
bellman_ford之单源有限最短路
auv,现在我刚学玩这个系列,真的感觉很熟悉很熟悉了,代码写了五六七八遍了,但是我相信自己下次碰到类似的新题,,,,,肯定不能一鼓作气写出来代码。。。。的核心优势是能够处理图中存在负权边的情况,但是即使图中所有边权均为非负值,Bellman-Ford算法仍然能正确计算最短路径,只是效率不如Dijkstra算法【看下面的博客,说实话我已经忘了他是怎么更新 的了.......算法-图-dijkstra 最短路径-优快云博客。原创 2025-03-21 14:08:37 · 810 阅读 · 0 评论 -
bellman_ford之判断负权回路
代码真的和上期的差不多,感觉自己真的好笨,一开始写的死代码真的会再遍历第n次,使用两个for大循环,还又定义了一个mindist数组,看了卡哥的代码 wasai 瞬间把代码行数缩短了十几行哈哈哈。原创 2025-03-21 11:24:08 · 567 阅读 · 0 评论 -
Bellman_ford 算法--带负权值的单源最短路问题,边列表存储
上期内容:-------原创 2025-03-18 21:40:20 · 822 阅读 · 0 评论 -
图的存储方式总结:如何高效表示顶点与边的关系?
不同的图类型对存储空间和操作效率有不同要求。:边数接近顶点数的平方(如完全连接的交通枢纽)容器的索引直接对应节点的编号。:边仅表示连接关系(如社交网络的好友关系):边包含权重信息(如地图导航中的道路长度):边数远少于顶点数的平方(如论文引用网络)通常需要初始化一个大小为。可以用来存储图的结构,但它不适合。开始,通常会初始化一个大小为。索引的情况下,节点编号从。索引的情况下,节点编号从。假设我们有一个图,节点为。原创 2025-03-04 12:18:36 · 858 阅读 · 0 评论 -
字符串哈希
字符串哈希是一种高效的字符串比较与查找方法,它通过将字符串映射为数字,使得两个字符串相等当且仅当其哈希值相等。----推荐学习博客。原创 2025-03-14 22:02:35 · 315 阅读 · 0 评论 -
【蓝桥】-动态规划-倒水
的方案,与当前最优值比较。的限制下,最大化总收益。确保每个物品只被处理一次。时,强制加上不选收益。(类似01背包优化)原创 2025-03-14 19:29:02 · 269 阅读 · 0 评论 -
【蓝桥】可行路径的方案数--BFS最短路径数目
看到一道题真的要想好用什么数据结构呜呜呜,很简单的一道题,对于一个结点分两种情况讨论真的没想到,算法还是太差了,,,当 BFS 遍历到某个节点时,第一次到达该节点的路径一定是距离最短的路径。:记录从起点到每个节点的最短路径数量。某个节点未被访问,则其路径数为 0。:记录从起点到每个节点的最短距离。BFS 可以自然地记录每个节点的最短距离和路径数量。由于 BFS 是逐层扩展的,从起点到。的路径一定是已知的最短路径之一,因此从。的路径也一定是已知的最短路径之一。的路径数中,同时取模以避免溢出。原创 2025-03-11 15:43:28 · 210 阅读 · 0 评论 -
【蓝桥】帮派弟位-DFS遍历树
题目很简单,比较容易理解,主要就是帮派成员关系构成一棵树,每个节点的“手下”为其子树的所有节点(不包括自己)。我们需要根据每个节点的手下人数(即子树大小减一)进行排序,人数相同则按序号升序排列,最后找出小明的排名。将问题分解为多个小问题(如构建树、计算子树大小、排序、查找排名等),逐步解决每个小问题!:通过深度优先搜索(DFS)遍历树,自底向上计算每个节点的子树大小。:在排序后的列表中找到小明的序号对应的位置。:使用邻接表存储每个节点的子节点。:根节点是没有父节点的节点。原创 2025-03-10 22:26:07 · 368 阅读 · 0 评论 -
算法-图-dijkstra 最短路径
好开心~原创 2025-03-06 21:41:34 · 1180 阅读 · 0 评论 -
C++ STL 容器详解与常见题型技巧
);// 排序结果:apple(5) → cherry(6) → banana(6)原创 2025-03-01 13:16:03 · 757 阅读 · 0 评论 -
广度优先搜索BFS-从入门到精通【卡玛】
没有理论基础的先看卡哥讲解的,很通俗易懂~,简单概括“📌广度优先搜索(Breadth First Search,简称 BFS)是一种在图或树等数据结构中遍历节点的算法。它从起始节点开始,以该节点为中心,一层一层向外扩展,依次访问同一层的所有节点,把这一层的节点都访问完后,才进入下一层继续访问,直至遍历完所有可达节点或找到目标节点。本篇注重代码实现并配有相关例题/模版题区别:广搜(bfs)是一圈一圈的搜索过程,和深搜(dfs)是一条路跑到黑然后再回溯。原创 2025-02-28 13:41:41 · 998 阅读 · 0 评论 -
深度优先搜索DFS-从入门到精通【卡玛】
没有理论基础的先看卡哥讲解的,很通俗易懂~,简单概括📌深度优先搜索(Depth First Search,简称 DFS)是一种在图或树等数据结构中遍历节点的算法。它沿着一个方向不断深入,直到无法继续为止,然后回溯并探索其他路径。本篇主要介绍dfs的代码实现,并枚举总结了几道经典例题。之前我跟着yxc大佬学习的dfs 也发表总结了相关博客 ,(ps:总感觉存储结构很复杂,到现在再看已经看不懂了哈哈哈)原创 2025-02-27 17:10:43 · 930 阅读 · 0 评论 -
【蓝桥】动态规划-多维dp-地图(带有转向次数限制)
问题实质:··------需要在一个网格中从 (1,1)移动到 (n,m),统计满足转向次数不超过 k 且不经过石头的有效路径数量。 对于普通的地图问题,我们直接利用深度优先搜索即可解决 。 我们有一个迷宫地图,空格表示可以通行的区域, 表示墙壁,起点为 ,终点为 。我们的目标是通过 DFS 搜索所有从起点到终点的路径。但是本题有一个限制,就是变换的方向只能有k次。那么我们要如何去思考这个限制呢,不妨在我们搜索的时候不仅记录位置,还记录一个变换方向的次数【记忆化搜索】,当没有变换次数的时候就不允原创 2025-02-23 18:56:45 · 482 阅读 · 0 评论 -
【AcWing】动态规划-线性DP -选数异或
其实这个转移方程的逻辑就像在“找搭子”——3. 查询时只需判断。原创 2025-02-22 21:11:57 · 989 阅读 · 0 评论 -
【蓝桥】二维DP--摆花
表示用3种花摆放5朵花的方案数为10。每种物品最多可以使用x 次,原创 2025-02-14 17:13:20 · 321 阅读 · 0 评论 -
【蓝桥】线性DP--最快洗车时间
✅转换成 0/1 背包问题,利用动态规划解决。✅dp[j] 表示是否能凑出j这个和,递推转移。✅时间复杂度,适用于sum ≤ 10^4。✅贪心方法可能失效,而动态规划保证最优解。原创 2025-02-13 18:22:48 · 512 阅读 · 0 评论 -
【蓝桥】线性DP-拍照
第三步:计算最长“山峰”子序列。和最长上升子序列的求法类似。(LIS,最长上升子序列)(LDS,最长下降子序列)原创 2025-02-07 14:07:06 · 418 阅读 · 0 评论 -
【蓝桥】线性DP-安全序列
表示在 0 个位置上有一种方案(不放任何油桶)。的两种情况来递推,确保覆盖所有可能的放置方案。原创 2025-02-05 23:12:58 · 401 阅读 · 0 评论 -
【蓝桥】线性DP-破损的楼梯
即到达终点的合法走法数量4。数组都被初始化为 0,原创 2025-02-05 20:21:08 · 243 阅读 · 0 评论 -
【acwing】动态规划系列
(参考。原创 2024-11-25 22:03:44 · 540 阅读 · 0 评论 -
【Acwing】背包问题汇总--理解DP动态规划
DP:从两个角度思考状态表示f(i,j):表示的以及(表示最大值、最小值还是数量等等)状态计算:集合的划分对于背包问题,应该这样思考:(对于其他问题思路也差不多)原创 2024-11-13 13:48:32 · 855 阅读 · 0 评论 -
DFS BFS 代码框架
【代码】DFS BFS 代码框架。原创 2024-10-06 20:01:48 · 240 阅读 · 0 评论 -
ACWing【846】树的重心、图中点的层次 、邻接表存储图/树、dfs/bfs搜索图/树
邻接表将每个节点的邻接关系以链表的形式记录下来。对于每一个节点,链表中存储了该节点所连接的其他节点。这个结构用来高效地存储图中的边关系通常用数组加链表的方式实现。h[i](记录每个节点的头指针,存储和i相邻的第一个节点在e[]中的位置)e[idx](存储的是每一条边的终点节点)ne[idx](存储链表中的下一个节点在e[]中的位置)idx:数组索引,一个指针变量,用来记录当前用了多少个数组位置。原创 2024-10-06 17:08:31 · 1190 阅读 · 0 评论
分享