- 博客(45)
- 资源 (1)
- 收藏
- 关注
原创 代码随想录算法训练day67---图论系列11《Floyd 算法&A*算法》
今天是算法营的第67天,最后一天了!恭喜自己!今日任务:● Floyd 算法●A*算法文章讲解dijkstra朴素版dijkstra堆优化版Bellman_ford 队列优化算法(又名SPFA)bellman_ford 算法判断负权回路bellman_ford之单源有限最短路Floyd 算法启发式搜索:A * 算法单源且边为正数:Dijkstra。单源边可为负数: Bellman-Ford。有负权回路:优先 Bellman-Ford。
2025-03-03 01:33:21
949
原创 代码随想录算法训练day66---图论系列10《Bellman_ford 队列优化算法&负权回路&单源有限最短路》
今天是算法营的第66天,希望自己能够坚持下来!今天继续图论part!今日任务:● Bellman_ford 队列优化算法(又名SPFA)●bellman_ford之判断负权回路●bellman_ford之单源有限最短路1.Bellman_ford 队列优化算法,使用队列保存上一次松弛更新的节点,使用bool数组避免重复加入队列2.bellman_ford之判断负权回路:对所有边进行n次松弛,在第n次时候判断是否仍然有变化,是则证明有回路。
2025-03-02 03:02:16
610
原创 代码随想录算法训练day65---图论系列9《dijkstra(堆优化版)&Bellman_ford 算法》
今天是算法营的第65天,希望自己能够坚持下来!今天继续图论part!今日任务:● dijkstra(堆优化版)●Bellman_ford 算法dijkstra算法堆优化:1.用邻接表来代替邻接矩阵存储图2.因为有权值,定义一个结构体作为邻接表的类型vector<list> grid(n + 1);3.定义一个小顶堆,用优先队列来排序所有边的权值,按小到大排序。4.循环弹出优先队列中的边,接着依然是标记访问过的节点,并且更新minDist。
2025-03-01 22:07:48
569
原创 代码随想录算法训练day64---图论系列8《拓扑排序&dijkstra(朴素版)》
今天是算法营的第64天,希望自己能够坚持下来!今天继续图论part!今日任务:● 拓扑排序●dijkstra(朴素版)拓扑排序 :1.unordered_map<int, vector> umap,存放每个节点指向多个节点2.一个vectorinDegrees记录每个节点的入度3.遍历inDegrees,用队列queue存放入度为0的节点4.遍历queue,将入度为0指向的节点入度-1,并将新的入度为0的节点加入到队列中。
2025-02-25 20:00:52
964
原创 代码随想录算法训练day63---图论系列7《prim算法&kruskal算法》
今天是算法营的第63天,希望自己能够坚持下来!今天继续图论part!今日任务:● prim算法●kruskal算法prim算法 :1.需要三个数组,一个存放节点和权值vector<vector> grid,一个存放非生成树节点到生成树的最小距离vectorminDist,一个存放节点是否成为生成树节点vectorisInTree。2.循环n-1次,遍历节点,找到是非生成树节点并且距离最小,加入到生成树节点中(isInTree标记为true)3.遍历节点,更新minDist。
2025-02-24 14:45:24
764
原创 代码随想录算法训练day62---图论系列6《并查集2》
今天是算法营的第62天,希望自己能够坚持下来!今天继续并查集系列!今日任务:● 108.冗余连接● 109.冗余连接II是否有环:遍历每一条边,将边加入到集合中,如果当前遍历的边是同根isSame(u,v)=true,说明已经在集合里了,行成了环有向树的话,只有根节点入度为0,其他节点入度都为1明天继续加油!
2025-02-21 01:02:55
495
原创 代码随想录算法训练day60---图论系列5《并查集》
今天是算法营的第60天,希望自己能够坚持下来!今天开始学并查集,今日任务:● 并查集理论基础● 寻找存在的路径寻找根节点,find(int u)将两个节点添加到同一个集合里,join(int u, int v)判断两个节点是否在同一个集合,isSame(int u, int v)明天继续加油!
2025-02-20 19:23:07
948
原创 代码随想录算法训练day59---图论系列4
今天是算法营的第59天,希望自己能够坚持下来!今天继续图论part!今日任务:● 110.字符串接龙● 105.有向图的完全可达性● 106.岛屿的周长字符串接龙 :求最短路径,考虑用广搜。根据题意可知节点的连接是“只替换一个字符”,遍历字符串,再分别替换成26字母,并用set检查是否在list中。有向图的完全可达性:需要有一个数组来记录到达过的路径,注意这里不需要回溯。岛屿的最大面积:方法一:岛屿周围是水或者边界就是边长 方法二:周长= 岛屿数量4 - 相邻的岛屿数2。
2025-02-20 03:18:42
677
原创 代码随想录算法训练day58---图论系列3《岛屿问题3》
今天是算法营的第57天,希望自己能够坚持下来!今天继续图论part!今日任务:● 101.孤岛的总面积●102.102.沉没孤岛● 103.水流问题● 104.建造最大岛屿1.对于孤岛的处理,从四周先搜索挨着四周的岛屿。2.如果求孤岛,先遍历四周将周边岛屿标记成0,再重新遍历地图,就剩下孤岛了;3.如果求四周岛屿,先遍历四周将岛屿标记成2,再重新遍历地图,将孤岛沉没:1->0,四周岛屿标记回1:2->1。
2025-02-14 16:41:59
764
原创 代码随想录算法训练day42--动态规划之《股票买卖系列2》
今天是算法训练的第42天,希望自己能够坚持下来!今日任务是股票买卖系列2:● 188.买卖股票的最佳时机IV● 309.最佳买卖股票时机含冷冻期● 714.买卖股票的最佳时机含手续费买卖股票系列2:1.如果限定是最多买卖k次,那么dp[i][j]的就是2k个状态,从1到k次持有,从1到k次不持有。dp数组j的大小给到2k+1就可以了。遍历每天的时候就再加多一个for循环去遍历j。j += 2) {
2025-02-11 22:52:49
652
原创 代码随想录算法训练day41--动态规划之《股票买卖系列1》
今天是算法训练的第41天,希望自己能够坚持下来!今日任务依旧是动态规划,不过是股票买卖系列:● 121. 买卖股票的最佳时机● 122.买卖股票的最佳时机II● 123.买卖股票的最佳时机III股票买卖系列:1.dp[i][j]:用下标i表示第i天,用下标j表示第i天的状态,每一天都有 持有和不持有的状态2.需要分清楚总共可以买卖的次数,只能买卖一次和可以多次买卖的区别在于dp[i][0]第i天持有股票,只能买卖一次是直接-prices[i];
2025-02-11 18:36:25
1037
原创 代码随想录算法训练day39--动态规划之《打家劫舍系列》
今天是算法训练的第39天,希望自己能够坚持下来!今日任务依旧是动态规划,不过是打家劫舍系列:● 198.打家劫舍● 213.打家劫舍II● 337.打家劫舍II打家劫舍:1.dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]2.递推公式按照偷和不偷两种情况分析,①偷:就是考虑i-2个房屋最多金额+i房屋的金额(因为i-1相邻,不能偷),也就是②不偷:就是考虑i-1个房屋最多金额 dp[i - 1]
2025-02-11 17:05:08
902
原创 代码随想录算法训练营day38
今天是算法营的第38天,希望自己能够坚持下来!今日任务:● 322. 零钱兑换● 279.完全平方数● 139.单词拆分● 关于多重背包,你该了解这些!给定一个的背包(容器),一些物品,物品有自己的重量和价值,求放满背包(容器),1.最大价值 2.有多少种方法 3.最少放多少个物品物品只能放一次:01背包物品无限放入:完全背包物品数量不一:多重背包。
2025-02-09 23:11:21
594
原创 代码随想录算法训练day57---图论系列2《岛屿问题》
今天是算法营的第57天,希望自己能够坚持下来!今天继续图论part!今日任务:● 99.岛屿数量 深搜● 99.岛屿数量 广搜● 100.岛屿的最大面积1.使用int dir[4][2] = {0, 1, 1, 0, -1, 0, 0, -1};来获取下一步的坐标2.深度优先搜索dfs的终止条件可以放在开头,也可以放在调用递归前,区别是对函数是处理本次节点还是下一个节点。3.广度优先搜索bfs,一旦加入队列就要标记。明天继续加油!
2025-02-09 00:24:23
784
原创 代码随想录算法训练营day37
今天是算法营的第37天,希望自己能够坚持下来!今日任务:● 完全背包● 518. 零钱兑换 II● 377. 组合总和 Ⅳ● 70. 爬楼梯 (进阶)二维数组:递推公式dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]] + value[i]),先遍历物品还是背包都可以。一维数组:递推公式dp[j] = max(dp[j], dp[j-weight[i]] + value[i]),必须先遍历物品,然后背包后序遍历。
2025-01-24 03:10:35
972
原创 代码随想录算法训练营day36
今天是算法营的第36天,希望自己能够坚持下来!今日任务:● 1049. 最后一块石头的重量 II● 494. 目标和● 474.一和零题目链接文章讲解视频讲解不同类型的背包问题,分割等和子集:求是否刚好装满背包,dp[j] = max(dp[j], dp[j - weight[i]] + value[i]) 求dp[target] == target最后一块石头的重量 II:尽可能装满背包,
2025-01-23 19:20:07
944
原创 代码随想录算法训练营day35
今天是算法营的第35天,希望自己能够坚持下来!今天开始是背包问题了,今日任务:● 01背包问题 二维● 01背包问题 一维● 416. 分割等和子集01背包:n个物品,w空间的背包,每个物品重量不同,价值不同,求背包装最多的价值是多少。需要初始化最上层和最左层先遍历背包还是物品都可以,因为两种方式都可以得到左上角的数据,先遍历物品比较好理解。就是二维中去掉i维度,理解成将i-1层的数据拷贝到i层。
2025-01-22 22:45:16
989
原创 代码随想录算法训练day56---图论系列1
今天是算法营的第32天,希望自己能够坚持下来!今日任务:● 62.不同路径● 63. 不同路径 II● 343. 整数拆分(思路较难)● 96. 不同的二叉搜索树(思路较难)动态规划的dp数组,通常二维的可以优化空间去掉dp[i]维度,但是不太好理解,遍历的时候也需要一些细节上的改动。明天继续加油!
2025-01-22 21:15:53
2509
原创 代码随想录算法训练营day32
今天是算法营的第32天,希望自己能够坚持下来!开始动态规划章节了,今日任务:● 动态规划理论基础● 509. 斐波那契数● 70. 爬楼梯● 746. 使用最小花费爬楼梯动态规划第一天!确定dp数组以及下标的含义确定递归公式dp数组如何初始化确定遍历顺序举例推导dp数组想不明白的时候需要回归dp数组下标含义再理解一下。初始化的时候如果遇到像是dp[0]没有含义的时候,试试从后面的dp[1]dp[2]比较明确初始化的下标开始初始化和递推。
2025-01-22 18:09:51
1010
原创 代码随想录算法训练营day31
今天是算法营的第31天,希望自己能够坚持下来!今日任务:● 56. 合并区间● 738.单调递增的数字● 968.监控二叉树贪心算法终于结束了,之前没接触过贪心算法,学完这一章后受益匪浅。每次看题目都会不禁“啊?”,然后看完题解又会有种茅塞顿开的感觉!明天继续加油!
2025-01-16 23:34:29
879
原创 代码随想录算法训练营day30
今天是算法营的第30天,希望自己能够坚持下来!今日主要是贪心算法的重叠区域问题:● 452. 用最少数量的箭引爆气球● 435. 无重叠区间● 763.划分字母区间贪心算法的区间问题:1.数字的区域,可以先对区域进行按左或右边界排序,然后再遍历区域按照题意判断是否满足要求,然后实时更新当前区域的区间用于下一个循环判断2.字符的区域,用s[i]-'a’来让字母跟数字下标对应,也是通过不断更新区间来实现明天继续加油!
2025-01-16 22:19:53
446
原创 代码随想录算法训练营day29
今天是算法营的第29天,希望自己能够坚持下来!今日任务:● 134. 加油站● 135. 分发糖果● 860.柠檬水找零● 406.根据身高重建队列贪心算法第三天,当遇到需要考虑两个维度的条件时,先处理好其中一个条件,再处理另一个条件。明天继续加油!
2025-01-11 02:32:02
733
原创 代码随想录算法训练营day28
今天是算法营的第28天,希望自己能够坚持下来!今日任务:● 122.买卖股票的最佳时机II● 55. 跳跃游戏● 45.跳跃游戏II● 1005.K次取反后最大化的数组和贪心算法第二天,依旧难的是思路,而且即使知道思路,代码中也有许多细节需要注意。明天继续加油!
2025-01-09 22:19:38
964
原创 代码随想录算法训练营day27
今天是算法营的第27天,希望自己能够坚持下来!今日任务:● 贪心算法理论基础● 455.分发饼干● 376. 摆动序列● 53. 最大子序和今天第一天的贪心算法,代码其实都不难,难的是思路,需要多积累一些解题思路才行。明天继续加油!
2025-01-09 21:45:12
860
原创 代码随想录算法训练营day25
今天是算法营的第25天,希望自己能够坚持下来!今日任务:● 491. 非递减子序列● 46. 全排列● 47. 全排列 II● 332. 重新安排行程1.需要用used数组去重的时候,要看清楚题目有没有顺序要求,有要求的情况下不能用used数组,只能用set。2.在数据范围不大的情况下,可以用数组来代替set,效率会更高。2.排列问题不需要sertIndex,但是需要用used来进行树枝去重。后面三道题,做了一道已经汗流浃背了,之后二刷再做吧。明天继续加油!
2025-01-07 19:30:35
677
原创 代码随想录算法训练营day24
今天是算法营的第23天,希望自己能够坚持下来!今日任务:● 93.复原IP地址● 78.子集● 90.子集II1.IP 地址的长度必须在4到12之间,每段不能以0开头,不能有数字以外的字符,不能超过2552.分割和组合问题是在叶子节点收集结果,而集合是在每个节点收集结果。3.树层去重的话,可以用used去重,也可以用set去重明天继续加油!
2025-01-07 17:53:05
784
原创 代码随想录算法训练营day23
今天是算法营的第23天,希望自己能够坚持下来!今日任务:● 39. 组合总和● 40.组合总和II● 131.分割回文串1.今天第一次涉及到去重,去重又分树枝(纵向)去重和树层(横向)去重。可以使用used数组去标记使用过的元素。2.分割问题跟组合问题类似,也是求不同分割点的组合。在for循环中判断是否符合切割要求。明天继续加油!
2025-01-05 12:11:01
695
原创 代码随想录算法训练营day22
今天是算法营的第22天,希望自己能够坚持下来!今日任务:● 回溯算法理论基础● 77. 组合● 216.组合总和III● 17.电话号码的字母组合今天主要学习了回溯算法的理论和其中解决组合类的题目。回溯算法是一种纯暴力的方法,嵌套多个for循环回溯法解决的问题都可以抽象为树形结构组合类的题目需要使用一个索引去告诉函数遍历到哪里了明天继续加油!
2025-01-03 23:58:25
714
2
原创 代码随想录算法训练营day21
今天是算法营的第21天,希望自己能够坚持下来!今日任务:● 669. 修剪二叉搜索树● 108. 将有序数组转换为二叉搜索树● 538. 把二叉搜索树转换为累加树二叉树终于结束了!二叉树的递归:1.确定递归函数的参数 2.确定终止条件 3.单层递归逻辑二叉树的遍历方式:前序遍历(中左右),中序遍历(左中右),后序遍历(左右中)二叉树的迭代法,前序和后序相似,使用栈来存放需要处理的节点;而中序的栈是存放指针访问的节点,向左访问到最底层,再弹出节点进行处理,再向右访问。
2025-01-03 17:13:04
1792
原创 代码随想录算法训练营day18
今天是算法营的第18天,希望自己能够坚持下来!今日任务:● 530.二叉搜索树的最小绝对差● 501. 二叉搜索树中的众数● 236. 二叉树的最近公共祖先今天主要是学习了:1.搜索二叉树的对相邻两个节点值的操作,可以使用双指针的方式一前一后操作。2.通过使用一直清空和更新结果集,可以将本来需要遍历两次的功能只用一次就完成了。3.有递归就有回溯!从下往上返回结果要用后序遍历,也就是回溯的思想。明天继续加油!
2025-01-01 20:04:05
1769
原创 代码随想录算法训练营day17
今天是算法营的第17天,最近比较忙,题目做完了没来得及写博客,抽空补上了。今日任务:● 654.最大二叉树● 617.合并二叉树● 700.二叉搜索树中的搜索● 98.验证二叉搜索树今天主要是学习了:1.输入是数组的时候,递归的时候可以不需要重新构造新数组,只需要保存对应的下标。2.需要同时操作两个二叉树,迭代法可以使用队列同时放入两个节点,再取两次出来做处理。3.二叉搜索树的特性:左
2024-12-31 16:43:15
986
原创 代码随想录算法训练营day16
今天是算法营的第16天,希望自己能够坚持下来!今日任务:● 513.找树左下角的值● 112. 路径总和● 106.从中序与后序遍历序列构造二叉树● 105.从前序与中序遍历序列构造二叉树今天主要是学习了:1.对二叉树的题目又有了更深入的理解,前两道基本看完题目也有个大概思路,看完视频之后也可以自己写出来代码了。2.第三道题细节很多,需要结合debug来想清楚里面的细节。明天继续加油!
2024-12-27 23:22:12
675
原创 代码随想录算法训练营day20
今天是算法营的第15天,希望自己能够坚持下来!今日任务:● 110.平衡二叉树● 257. 二叉树的所有路径● 404.左叶子之和● 222.完全二叉树的节点个数今天主要是学习了:1.二叉树的题目好像都可以用递归法来做,递归的时候严格按照递归三部曲去写,然后具体的题目可能需要修改一些细节。2.能用递归的也能用迭代,迭代的模版都可以套用,但是有些题目不是很好用迭代。3.有递归就有回溯明天继续加油!
2024-12-27 01:06:12
676
原创 代码随想录算法训练营day14
今天是算法营的第14天,希望自己能够坚持下来!今日任务:● 226.翻转二叉树● 101. 对称二叉树● 104.二叉树的最大深度● 111.二叉树的最小深度今天做的题有些昨天已经做过了,又分别用递归法和迭代法用了一遍,加深了这两种方法的印象。二叉树的题感觉看完了的时候觉得会了,第二天感觉又忘了,还是需要理解其中的核心思路,并且强化才行!明天继续加油!
2024-12-26 17:50:48
864
原创 代码随想录算法训练营day13
今天是算法营的第13天,希望自己能够坚持下来!今日任务:● 二叉树的理论基础● 递归遍历● 迭代遍历● 统一迭代● 层序遍历跟链表的定义类似,二叉树有左右两个节点。int val;今天主要是学习了:1.重新复习了一遍二叉树的知识。2.二叉树遍历的方法:1.递归法 2.迭代法 3.统一迭代法 4.层序遍历法3.二叉树的前序,中序,后序遍历其实就是中节点的位置,例如前序就是中节点在前。明天继续加油!
2024-12-25 00:50:41
712
原创 代码随想录算法训练营day11
今天是算法营的第11天,希望自己能够坚持下来!今日任务:● 150. 逆波兰表达式求值● 239. 滑动窗口最大值● 前 K 个高频元素● 总结今天主要是学习了:1.栈适合解决一些临近元素之间操作的问题2.deque和优先级队列的用法明天继续加油!
2024-12-22 23:55:43
429
原创 代码随想录算法训练营day10
今天是算法营的第10天,不知不觉已经第10天了!希望自己能够坚持下来!今日任务:● 栈与队列的理论基础● 232.用栈实现队列● 225. 用队列实现栈● 20. 有效的括号●1047. 删除字符串中的所有相邻重复项今天主要是学习了:1.重新复习了一遍队列和栈的知识。2.才想起来string也可以像容器一样用empty(),push_back(),back()这种操作!(之前都没用过)明天继续加油!
2024-12-22 01:29:05
726
原创 代码随想录算法训练营day9
今天是算法营的第9天,希望自己能够坚持下来!今日任务:●151.翻转字符串里的单词●卡码网:55.右旋转字符串●28. 实现 strStr()●459.重复的子字符串●字符串总结●双指针回顾今天主要是学习了:1.字符串反转先整体反转后局部反转的解题思路2.kmp的初体验…有点晕QAQ还需要再多多做题加深理解明天继续加油!
2024-12-20 19:44:16
643
原创 代码随想录算法训练营day8
今天是算法营的第8天,希望自己能够坚持下来!今日任务:● 344.反转字符串● 541. 反转字符串II● 卡码网:54.替换数字今天又加深了对双指针的用法,很多考察数组、链表、字符串等操作的面试题,都使用双指针法。27.移除元素:快慢指针,快指针找新数组需要的元素,覆盖到慢指针所指的位置15.三数之和:先将数组排序,遍历数组,双指针分别在头尾,根据三数之和移动头和尾指针的位置,需要注意对a,b,c三个数的去重18.四数之和:在三数之和外面再套一层for循环,需要注意剪枝的细节。
2024-12-18 22:24:40
697
原创 代码随想录算法训练营day7
今天是算法营的第7天,希望自己能够坚持下来!今日任务:● 454.四数相加II● 383. 赎金信● 15. 三数之和● 18. 四数之和● 总结今天主要是学习了:1.观察题目是否有顺序要求,没有要求的话还可以考虑使用sort将数组排序,然后使用双指针2.map虽然万能,但如果像题目只包含小写字母,可以优先用数组。明天继续加油!
2024-12-18 01:12:41
757
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人