- 博客(55)
- 收藏
- 关注
原创 代码随想录算法训练营第六十二天 | Floyd 算法、A star算法、最短路算法总结篇、图论总结
代码随想录 (programmercarl.com)——最短路算法总结篇单源且边为正数,用 dijkstra,一般情况下可以直接用 堆优化版本。单源且边可为负数,用 Bellman-Ford,一般情况下可以直接用 spfa。有负权回路,优先 Bellman-Ford。多源点求最短路径,用 floyd。代码随想录 (programmercarl.com)——图论总结篇。
2024-08-22 22:34:04 157
原创 代码随想录算法训练营第六十一天 | SPFA 算法、Bellman_ford之判断负权回路、Bellman_ford之单源有限最短路
只对上一次松弛时更新过的节点,作为出发节点,对其所连接的边进行松弛即可。
2024-08-22 22:30:10 233
原创 代码随想录算法训练营第六十天 | dijkstra(堆优化版)、Bellman_ford 算法精讲
如果 通过 A 到 B 这条边可以获得更短的到达B节点的路径,即如果。
2024-08-22 22:26:56 282
原创 代码随想录算法训练营第五十八天 | 拓扑排序精讲、dijkstra(朴素版)精讲
给出一个 有向图,把这个有向图转成线性的排序 就叫拓扑排序。同时拓扑排序也是需要检测该有向图是否有环,即存在循环依赖的情况,如果有,则不能做线性排序。
2024-08-22 22:24:33 248
原创 代码随想录算法训练营第五十七天 | 最小生成树之prim算法精讲、最小生成树之kruskal算法精讲
prim 算法是维护点的集合,kruskal 算法是维护边的集合如果一个图节点多,但是边相对少,选择 kruskal 算法更优;若果一个图边多,节点少,选择 prim 算法更优。
2024-08-22 22:21:54 217
原创 代码随想录算法训练营第五十六天 | 108. 冗余连接、109. 冗余连接 II
从前向后遍历每一条边,如果边上的点不在同一个集合,就加入集合(即,相连);如果两个节点在同一个集合,再加入变就会构成一个环,这条边就要删掉。
2024-08-22 22:19:08 224
原创 代码随想录算法训练营第五十五天 | 并查集理论基础、107. 寻找存在的路径
1. 将两个元素添加到一个集合中。2. 判断两个元素是否在同一个集合中。
2024-08-22 22:16:27 244
原创 代码随想录算法训练营第五十四天 | 110. 字符串接龙、105. 有向图的完全可达性、106.岛屿的周长
求最短路径——bfs。先判断点与点之间是否可以相连,如果两个点只差一个字符,那么可以相连,连接后找出最短路径,广搜找到的终点一定就是最短路径。无向图,需要记录字符串是否走过。
2024-08-21 23:07:43 215
原创 代码随想录算法训练营第五十三天 | 101. 孤岛的总面积、102. 沉没孤岛、 103. 水流问题、 104. 建造最大岛屿
从周边开始查找陆地,并将其变成0。
2024-08-21 23:04:33 258
原创 代码随想录算法训练营第五十一天 | 99. 岛屿数量 深搜、99. 岛屿数量 广搜、100. 岛屿的最大面积
每遇到一个陆地(1),从当前位置开始深搜,如果访问过则标记为“True”,即表示访问过,每进行一次深搜,岛屿数量+1。
2024-08-14 14:37:21 208
原创 代码随想录算法训练营第五十天 | 图论理论基础、深搜理论基础、98. 所有可达路径、广搜理论基础
有向图 和 无向图。无向图中有几条边连接该节点,该节点就有几度。无向图中,任何两个节点可以相互到达。有向图中,任何两个节点可以相互到达。无向图中的极大连通子图称之为该图的一个连通分量。有向图中极大强连通子图称之为该图的强连通分量。
2024-08-14 14:33:52 249
原创 代码随想录算法训练营第四十九天 | 42. 接雨水、84. 柱状图中最大的矩形
找到底座,其左边第一个比它高的柱子和右边第一个比它高的柱子,形成凹槽,横向求解面积。h = min(h[ stack[ -1 ]](左面柱子的高度), h[ i ](右面柱子高度)) - h[ mid ](中间柱子高度)w = i (右面柱子下标)- stack[ -1 ](左面柱子下标)- 1(只求中间一段宽度,再减一)s = h * w。
2024-08-13 09:43:46 125
原创 代码随想录算法训练营第四十八天 | 739. 每日温度、496.下一个更大元素 I 、503.下一个更大元素II
存放之前遍历过的元素,适合求当前元素左边或右边第一个比其大或小的元素。求前后第一个比其的元素求前后第一个比其的元素1. 当前遍历的元素 T[ i ] < 栈顶元素 T[()] 的情况2. 当前遍历的元素 T[ i ] = 栈顶元素 T[()] 的情况3. 当前遍历的元素 T[ i ] > 栈顶元素 T[()] 的情况。
2024-08-13 09:30:22 159
原创 代码随想录算法训练营第四十七天 | 647. 回文子串、516. 最长回文子序列、动态规划总结篇
代码随想录 (programmercarl.com)——动态规划总结篇。
2024-08-11 17:38:16 195
原创 代码随想录算法训练营第四十六天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇
代码随想录 (programmercarl.com)——编辑距离总结篇。
2024-08-11 17:34:58 240
原创 代码随想录算法训练营第四十四天 | 1143. 最长公共子序列、1035. 不相交的线、53. 最大子序和、392.判断子序列
else: dp[ i ][ j ] = max(dp[ i - 1 ][ j ], dp[ i ][ j - 1 ]),明确 i - 1 和 j - 1 不相同时,分别忽略两个text遍历到的最后一位。dp[ i ][ j ] 表示以 [ 0, i - 1 ] text1 和以[ 0, j - 1 ] text2的最长公共子序列长度。dp[ i ] = max(dp[ i - 1 ] + nums[ i ](前面的还要), nums[ i ](前面的不要了,从nums[ i ]开始计算))
2024-08-11 17:29:03 169
原创 代码随想录算法训练营第四十三天 | 300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
dp[ i ] = max(dp[ j ] + 1, dp[ i ]),nums[ j ] 为 nums[ i ] 前一位。dp[ i ][ j ] 表示以 i - 1 为结尾的nums1 和 j - 1 结尾的 nums2,最长重复子数组的长度。dp[ i ][ 0 ] = 0, dp[ 0 ][ j ] = 0,因为第一行和第一列在dp数组的定义下没意义。dp[ i ] 表示以 nums[ i ] 为结尾的最长子序列的长度。结果为dp数组最大值。dp[ i ] 表示以 i 为结尾的最长递增子序列长度。
2024-08-11 17:24:40 150
原创 代码随想录算法训练营第四十二天 | 188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、股票总结
代码随想录 (programmercarl.com)——股票总结。
2024-08-09 16:16:47 228
原创 代码随想录算法训练营第四十一天 | 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机II、123. 买卖股票的最佳时机III
与上一题唯一的区别是由于股票可以买卖多次,dp[ i ][ 0 ] 中需要考虑 i - 1 天之前获得的利润,即 dp[ i ][ 0 ] = max(dp[ i - 1 ][ 0 ], dp[ i - 1][ 1 ] - price[ i ]),其余部分完全一致。dp[ 0 ][ 0 ] = 0, dp[ 0 ][ 1 ] = -price[ 0 ], dp[ 0 ][ 2 ] = 0(理解为同一天买卖), dp[ 0 ][ 3 ] = -price[ 0 ], dp[ 0 ][ 4 ] = 0。
2024-08-09 16:12:01 232
原创 代码随想录算法训练营第四十天 | 198. 打家劫舍、213. 打家劫舍II 、337. 打家劫舍III
偷 i:dp[ i - 2 ] + nums[ i ],因为dp[i - 1] 一定不能被偷,所以找 dp[ i -2 ]不偷i:dp[ i - 1],表示 i - 1之前所偷最大钱币数,不一定偷 i - 1,i - 1 仅仅是一个考虑范围。递推公式:dp[ i ] = max(dp[ i - 2 ] + nums[ i ], dp[ i - 1])dp[ 0 ]表示不偷当前节点获得的最大金钱,dp[ 1 ]表示偷当前节点获得的最大金钱。考虑下标 i (包含)所能偷的最大钱币数为 dp[ i ]
2024-08-08 10:01:52 303
原创 代码随想录算法训练营第三十九天 | 322. 零钱兑换、279.完全平方数、139.单词拆分、多重背包理论基础、背包问题总结
416. 分割等和子集 - 力扣(LeetCode)1049. 最后一块石头的重量 II - 力扣(LeetCode)494. 目标和 - 力扣(LeetCode)518. 零钱兑换 II - 力扣(LeetCode)377. 组合总和 Ⅳ - 力扣(LeetCode)57. 爬楼梯(第八期模拟笔试) (kamacoder.com)474. 一和零 - 力扣(LeetCode)322. 零钱兑换 - 力扣(LeetCode)279. 完全平方数 - 力扣(LeetCode)
2024-08-07 21:25:05 322
原创 代码随想录算法训练营第三十七天 | 完全背包理论基础、518. 零钱兑换 II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶)
背包改成正序遍历,两层 for 循环可以颠倒。
2024-08-05 20:41:00 315
原创 代码随想录算法训练营第三十六天 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零
将石头分成近似相等的两堆,一堆重量为 dp[ target ],另一堆重量为 sum - dp[ target ],最终结果 result = sum - dp[ target ] - dp[ target ]dp[ j ] 表示装满容量为 j 的最大重量重量即价值,因此递推公式为 dp[ j ] = max( dp[ j ], dp[ j - stones[ i ]] + stones[ i ] )dp[ 0 ] = 0,定义背包容量为1501,全部初始化为 0递推公式。
2024-08-05 20:35:12 234
原创 代码随想录算法训练营第三十五天 | 0-1背包问题 二维、0-1背包问题 一维、416. 分割等和子集
0-1背包:n种物品,每种物品只有一个;完全背包:n种物品,每种物品无限个;多重背包:n种物品,每种物品个数各不相同。
2024-08-04 22:50:52 266
原创 代码随想录算法训练营第三十四天 | 62.不同路径、63. 不同路径 II、343. 整数拆分、96. 不同的二叉搜索树
1. 确定 dp 数组及下标含义:dp[ i ][ j ]代表从 (0, 0) 到 (i , j) 有多少种不同的路径2. 确定递推公式:只能由上推下或左推右 ,dp[ i ][ j ] = dp[ i - 1 ][ j ] + dp[ i ][ j - 1 ],其中dp[ i - 1 ][ j ] 代表走到 [ i ][ j ] 上面格子有多少种路径,dp[ i ][ j - 1 ] 代表走到 [ i ][ j ] 左面格子有多少种路径。
2024-08-02 21:04:22 246
原创 代码随想录算法训练营第三十三天 | 动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
1. 动态规划基础;2. 背包问题;3. 打家劫舍;4. 股票问题;5. 子序列问题。1. 确定 dp[ i ] 数组及下标含义;2. 确定递推公式;3.确定dp数组如何初始化;4. 确定遍历顺序(背包问题中很重要);5. 举例推导dp数组。
2024-08-01 22:43:40 380
原创 代码随想录算法训练营第三十二天 | 56. 合并区间、738.单调递增的数字、968.监控二叉树、贪心算法总结
代码随想录 (programmercarl.com)——贪心算法总结。
2024-07-29 09:47:28 229
原创 代码随想录算法训练营第三十天 | 452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间
题目链接:文章讲解:视频讲解:题目链接:文章讲解:视频讲解:题目链接:文章讲解:
2024-07-29 09:35:05 207
原创 代码随想录算法训练营第二十九天 | 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列
cursum累加每个站点剩余油量(gas[i] - cost(i)),如果遇到负,令 i+1 为新的起始位置,看能否跑完一圈。
2024-07-29 09:29:49 314
原创 代码随想录算法训练营第二十八天 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II、1005.K次取反后最大化的数组和
假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0],相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。所以只需要统计两天利润的差值,最后将所有整数相加即可。
2024-07-18 16:59:28 318
原创 代码随想录算法训练营第二十六天 | 491.递增子序列、46.全排列、47.全排列 II、332.重新安排行程、51.N皇后、37.解数独、回溯算法总结
代码随想录 (programmercarl.com)——回溯算法总结。
2024-07-16 22:40:50 276
原创 代码随想录算法训练营第二十五天 | 93.复原IP地址、78.子集、90.子集II
题目链接:文章讲解:视频讲解:题目链接:文章讲解:视频讲解:题目链接:文章讲解:
2024-07-16 22:39:54 135
原创 代码随想录算法训练营第二十三天 | 39. 组合总和、40.组合总和II、131.分割回文串
第二个元素的分支不带第一个元素先排序,只要有一个分支sum大于target,则没有必要继续遍历,剪枝。
2024-07-16 22:36:03 308
原创 代码随想录算法训练营第二十二天 | 回溯理论基础、77. 组合、216.组合总和III、17.电话号码的字母组合
修改for循环的范围,len(path)表示已经选取元素的大小,用 (k - len(path) 得到还需要选取元素的个数,至多还剩 (n - ( k - len(path) ) + 2) 个元素需要选取,range函数为左闭右开区间。先用map做一个映射,构造n叉树,结果为n叉树的叶子节点。输入数字的个数,控制树的深度;(1)组合问题:N个数里面按一定规则找出k个数的集合;(2)切割问题:给一个字符串,问右几种切割方式;(3)子集问题:N个数有多少个符合条件的子集;(5)棋盘问题:N皇后,解数独等。
2024-07-15 23:10:39 1012
原创 代码随想录算法训练营第二十一天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、二叉树总结
代码随想录 (programmercarl.com)——二叉树总结。
2024-07-12 21:23:05 170
原创 代码随想录算法训练营第二十天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
当遍历根节点比p, q都大的话,说明p, q在左子树里,此时向左遍历;如果当前遍历节点比p, q都小的话,说明在右子树里;如果当前节点位于p, q之间,说明位公共节点。
2024-07-11 21:35:23 263
原创 代码随想录算法训练营第十九天 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
中序遍历后,计算两两节点差值。定义一个cur 一个pre两个指针,用cur-pre,用res记录下来差值,res最小值即为所求。遇到二叉树求最值得题目,想一下二叉树遍历时候是否有序!
2024-07-11 16:52:52 376
原创 代码随想录算法训练营第十八天 | 654.最大二叉树、617.合并二叉树 、700.二叉搜索树中的搜索、98.验证二叉搜索树
构造二叉树类题目都用前序遍历。
2024-07-10 22:49:57 314
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人