
代码随想录算法训练营
文章平均质量分 82
kill bert
在深度学习的小菜鸡
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
代码随想录第六十二天| Floyd 算法精讲 A * 算法精讲 (A star算法) 最短路算法总结篇
Floyd 算法通过动态规划思想,利用三维数组逐步更新节点间的最短路径。空间优化后使用二维数组,时间复杂度为 O(n^3),适合稠密图或多源最短路径问题。理解动态规划的状态转移和遍历顺序是掌握该算法的关键。A* 算法通过引入启发式函数,能够在大规模地图上高效地找到最短路径。相比传统的广度优先搜索(BFS),A* 算法通过优先扩展接近目标的节点,减少了不必要的搜索,提高了效率。选择合适的启发式函数对算法性能至关重要。原创 2025-03-25 19:39:55 · 752 阅读 · 0 评论 -
代码随想录第六十天| Bellman_ford 队列优化算法(又名SPFA) bellman_ford之判断负权回路 bellman_ford之单源有限最短路
SPFA 算法通过队列优化了 Bellman-Ford 算法的松弛过程,减少了不必要的松弛操作,提高了算法效率。其时间复杂度在最坏情况下为 O(n * m),但一般情况下表现更优,尤其在稀疏图中效果显著。理解队列的使用和松弛操作的优化是掌握该算法的关键。通过 SPFA 算法,我们可以在求解单源最短路径的同时检测图中是否存在负权回路。该算法在稀疏图中效率较高,且能够处理存在负权边的情况。理解节点入队次数与负权回路的关系是掌握该算法判断负权回路功能的关键。原创 2025-03-25 14:31:00 · 623 阅读 · 0 评论 -
代码随想录第五十九天| dijkstra(堆优化版)精讲 Bellman_ford 算法精讲
堆优化版Dijkstra算法通过优先队列优化节点选择过程,将时间复杂度从O(n^2)降低到O((n + m) log n),适合处理稀疏图。理解邻接表的存储方式和优先队列的使用是掌握该算法的关键。Bellman-Ford 算法通过多次松弛操作逐步求解单源最短路径问题,能够处理图中存在负权边的情况。其时间复杂度为 O(n*m),其中 n 是节点数,m 是边数。理解松弛操作的含义和多次松弛的必要性是掌握该算法的关键.原创 2025-03-25 11:20:35 · 729 阅读 · 0 评论 -
代码随想录第五十八天| 拓扑排序精讲 朴素版dijkstra #模拟过程
某个大型软件项目的构建系统拥有 N 个文件,文件编号从 0 到 N - 1,在这些文件中,某些文件依赖于其他文件的内容,这意味着如果文件 A 依赖于文件 B,则必须在处理文件 A 之前处理文件 B (0 <= A, B <= N - 1)。请编写一个算法,用于确定文件处理的顺序。输入描述:第一行输入两个正整数 N, M。表示 N 个文件之间拥有 M 条依赖关系。后续 M 行,每行两个正整数 S 和 T,表示 T 文件依赖于 S 文件。原创 2025-03-21 10:55:37 · 734 阅读 · 0 评论 -
代码随想录第五十七天| prim算法精讲 kruskal算法精讲
在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将所有岛屿联通起来(注意:这是一个无向图)。给定一张地图,其中包括了所有的岛屿,以及它们之间的距离。以最小化公路建设长度,确保可以链接到所有岛屿。原创 2025-03-21 09:39:53 · 518 阅读 · 0 评论 -
代码随想录第五十六天| 108. 冗余连接 109. 冗余连接||
有一个图,它是一棵树,拥有 n 个节点(节点编号 1 到 n)和 n - 1 条边的连通无环无向图。现在在这棵树的基础上,添加一条边(依然是 n 个节点,但有 n 条边),使这个图变成了有环图。请你找出冗余边,删除后,使该图可以重新变成一棵树。原创 2025-03-18 14:00:18 · 861 阅读 · 0 评论 -
代码随想录第五十五天| 并查集理论基础 寻找存在的路径
并查集是一种简单而高效的处理动态连通性问题的数据结构。通过路径压缩和按秩合并等优化技术,它能够在接近常数的时间内完成元素的合并和查找操作。理解并查集的核心思想和优化方法,对于解决许多实际问题(如图的连通性、集合的合并等)具有重要意义。原创 2025-03-14 13:21:03 · 866 阅读 · 0 评论 -
代码随想录第五十三天| 102.沉没孤岛 105.有向图的完全可达性 106.岛屿的周长
给定一个字符串 beginStr 和一个字符串 endStr,以及一个字典 strList。找到从 beginStr 到 endStr 的最短转换序列中的字符串数目。如果不存在这样的转换序列,返回 0。原创 2025-03-14 12:57:22 · 697 阅读 · 0 评论 -
代码随想录第五十二天| 101.孤岛的总面积 102.沉没孤岛 103.水流问题 104.建造最大岛屿
给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛屿。现在你需要计算所有孤岛的总面积,岛屿面积的计算方式为组成岛屿的陆地的总数。原创 2025-03-13 21:14:39 · 814 阅读 · 0 评论 -
代码随想录第五十一天| 99.岛屿数量 深搜 99. 岛屿数量 广搜 100.岛屿的最大面积
给定一个由 1(陆地)和 0(水)组成的矩阵,计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。矩阵外均被水包围。原创 2025-03-12 11:09:56 · 575 阅读 · 0 评论 -
代码随想录第五十天| 图论理论基础
这篇我们将正式开始学习图论!在代码随想录中,图论相关的算法题目将统一使用ACM模式。为什么要使用ACM模式呢?原创 2025-03-04 10:31:52 · 1516 阅读 · 0 评论 -
代码随想录第四十九天| 42. 接雨水 84.84.柱状图中最大的矩形
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。原创 2025-03-04 02:07:10 · 361 阅读 · 0 评论 -
代码随想录第四十八天| 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II
请根据每日气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温列表长度的范围是 [1, 30000]。每个气温的值均为华氏度,都是在 [30, 100] 范围内的整数。原创 2025-03-03 11:55:22 · 926 阅读 · 0 评论 -
代码随想录第四十六天| 647. 回文子串 516.最长回文子序列 动态规划总结篇
这个问题可以通过动态规划来解决。我们定义一个二维布尔数组 dp,其中 dp[i][j] 表示字符串从索引 i 到 j 的子串是否是一个回文串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。,找到其中最长的回文子序列,并返回该序列的长度。这个问题同样可以通过动态规划来解决。我们定义一个二维数组。的最大长度为 1000。的最长回文子序列的长度。原创 2025-02-28 10:13:21 · 297 阅读 · 0 评论 -
代码随想录第四十五天|115.不同的子序列 583. 两个字符串的删除操作 72. 编辑距离
字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)我们定义一个二维数组 dp,其中 dp[i][j] 表示字符串 s 的前 i 个字符中包含字符串 t 的前 j 个字符的子序列的个数。给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。个字符转换为相同字符串所需的最小删除操作数。原创 2025-02-28 09:40:57 · 848 阅读 · 0 评论 -
代码随想录第四十四天|1143.最长公共子序列 1035.不相交的线 53. 最大子序和 392.判断子序列
如果 nums1[i-1] 和 nums2[j-1] 相等,那么我们可以在这两个数字之间绘制一条连线,因此 dp[i][j] = dp[i-1][j-1] + 1;如果不相等,那么我们不能在这两个数字之间绘制连线,因此 dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1])。否则,dp[i][j] Math.max(dp[i-1][j], dp[i][j-1])。如果字符不同,则 dp[i][j] 是 dp[i-1][j] 和 dp[i][j-1] 中的较大值。原创 2025-02-27 17:57:32 · 782 阅读 · 0 评论 -
代码随想录第四十三天| 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组
定义一个二维数组 dp,其中 dp[i][j] 表示以 A[i-1] 和 B[j-1] 结尾的最长重复子数组的长度。如果 A[i-1] 和 B[j-1] 相等,那么 dp[i][j] = dp[i-1][j-1] + 1;定义 dp[i] 为以 nums[i] 结尾的最长连续递增子序列的长度。连续递增的子序列可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1],那么子序列 [nums[l], nums[l + 1], …原创 2025-02-27 15:56:20 · 379 阅读 · 0 评论 -
代码随想录第四十二天| 188.买卖股票的最佳时机IV 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费
解释: 在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 6-2 4。解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 4-2 2。随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 3-0 3。设计一个算法计算出最大利润。输入: k = 2, prices = [3,2,6,5,0,3]原创 2025-02-27 15:12:51 · 821 阅读 · 0 评论 -
代码随想录第四十一天| 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III
我们定义一个二维数组 dp,其中 dp[i][j] 表示在第 i 天结束时,状态为 j 时的最大利润。解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3。解释: 在第 1 天(股票价格 1)的时候买入,在第 5 天 (股票价格 5)的时候卖出,这笔交易所能获得利润 5-1 4。原创 2025-02-27 11:00:58 · 899 阅读 · 0 评论 -
代码随想录第三十九天| 198.打家劫舍 213.打家劫舍II 337.打家劫舍 III
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你,一夜之内能够偷窃到的最高金额。原创 2025-02-27 10:20:18 · 703 阅读 · 0 评论 -
代码随想录第三十八天| 322. 零钱兑换 279.完全平方数 139.单词拆分 动态规划:关于多重背包,你该了解这些!
给定不同面额的硬币coins和一个总金额amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。原创 2025-02-24 19:07:11 · 533 阅读 · 0 评论 -
代码随想录第三十七天| 52. 携带研究材料(第七期模拟笔试) 518. 零钱兑换 II 377. 组合总和 Ⅳ 70. 爬楼梯 (进阶)
设dp[i][j]表示前 i 种物品,背包容量为 j 时能获得的最大价值。设dp[j]表示凑成金额 j 的硬币组合数。设dp[j]表示凑成目标和j的组合数。设dp[j]表示爬到第j阶的方法数。原创 2025-02-20 10:13:49 · 1027 阅读 · 0 评论 -
代码随想录第三十五天| 46. 携带研究材料(第六期模拟笔试) 416. 分割等和子集
小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的空间,并且具有不同的价值。小明的行李空间为 N,问小明应该如何抉择,才能携带最大价值的研究材料。每种研究材料只能选择一次,并且只有选与不选两种选择,不能进行切割。原创 2025-02-17 22:48:31 · 560 阅读 · 0 评论 -
代码随想录第三十四天| 62..不同路径 63.不同路径2
一个机器人位于一个 m x n 网格的左上角(起始点在下图中标记为 “Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。问总共有多少条不同的路径?原创 2025-02-16 23:49:18 · 378 阅读 · 0 评论 -
代码随想录第三十二天| 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
斐波那契数,通常用F(n)表示,形成的序列称为。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。n > 1一个整数n计算F(n)原创 2024-11-22 07:02:12 · 436 阅读 · 0 评论 -
代码随想录第三十一天| 56. 合并区间 738.单调递增的数字
给定一个区间的集合intervals,请合并所有重叠的区间。原创 2024-11-21 00:13:53 · 247 阅读 · 0 评论 -
代码随想录第三十天| 452. 用最少数量的箭引爆气球 435. 无重叠区间 763.划分字母区间
在二维平面上,给你一些气球。对于每个气球points[i],表示气球的水平直径开始和结束于x坐标为和。你可以沿着 x 轴发射箭,一支箭可以引爆直径覆盖范围内的所有气球。求解所需的最少箭数以引爆所有气球。原创 2024-11-20 23:47:37 · 499 阅读 · 0 评论 -
代码随想录第二十九天| 134. 加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列
markdown复制代码。原创 2024-11-20 22:48:52 · 767 阅读 · 0 评论 -
代码随想录第二十八天| 122.买卖股票的最佳时机 II 55. 跳跃游戏 45.跳跃游戏II 1005.K次取反后最大化的数组和
给定一个数组prices,它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。原创 2024-11-17 22:56:28 · 729 阅读 · 0 评论 -
代码随想录第二十七天| 455.分发饼干 376. 摆动序列 53. 最大子序和
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。原创 2024-11-15 23:31:21 · 453 阅读 · 0 评论 -
代码随想录第二十五天| 491.递增子序列 46. 全排列 47.全排列 II
给定一个整型数组,你的任务是找到所有该数组的递增子序列,且递增子序列的长度至少是 2。原创 2024-11-15 20:43:32 · 240 阅读 · 0 评论 -
代码随想录第二十四天| 93.复原IP地址 78.子集 90.子集II
给定一个只包含数字的字符串s,复原它并返回所有可能的有效 IP 地址格式。一个有效的 IP 地址 由四个整数部分组成,每部分的取值范围是 0-255,每个部分不能包含前导零。原创 2024-11-14 22:56:06 · 527 阅读 · 0 评论 -
代码随想录第二十三天| 39. 组合总和 40.组合总和II 131.分割回文串
给定一个的整数数组candidates和一个目标整数target,找出candidates中所有可以使数字和为target的组合。candidates。原创 2024-11-14 20:29:16 · 834 阅读 · 0 评论 -
代码随想录第二十二天| 77. 组合 216.组合总和III 17.电话号码的字母组合
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。原创 2024-11-14 19:07:03 · 359 阅读 · 0 评论 -
代码随想录第二十一天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L)。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。:给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。原创 2024-11-13 22:34:22 · 422 阅读 · 0 评论 -
代码随想录第二十天| 235. 二叉搜索树的最近公共祖先 、 701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点
给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。在百度百科中,最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。原创 2024-11-08 15:19:08 · 557 阅读 · 0 评论 -
代码随想录第十八天| 530.二叉搜索树的最小绝对差 、 501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。由于二叉搜索树的中序遍历是有序的,因此可以通过中序遍历逐步比较当前节点和前一个节点的值,更新最小差值。给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。可以通过递归的方式查找两个节点的最近公共祖先。原创 2024-11-06 22:57:36 · 459 阅读 · 0 评论 -
代码随想录第十七天| 654.最大二叉树 、617.合并二叉树 、 700.二叉搜索树中的搜索 、98. 验证二叉搜索树
给定二叉搜索树(BST)的根节点和一个值,你需要在BST中找到节点值等于给定值的节点。返回以该节点为根的子树。如果节点不存在,则返回。,想象将其中一个覆盖到另一个上,两个二叉树的某些节点会重叠。给定一个二叉树,判断其是否是一个有效的二叉搜索树(BST)。给定一个不重复的整数数组。作为合并后的树的根节点。原创 2024-11-06 00:00:27 · 364 阅读 · 0 评论 -
代码随想录第十六天| 513.找树左下角的值 、112. 路径总和 、113. 路径总和 II、106、从中序与后序遍历序列构造二叉树
判断该树中是否存在一条从根节点到叶子节点的路径,使得路径上所有节点值的和等于目标和。,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。给定一个二叉树,找到树的最后一行最左边的节点值。:根据一棵树的中序遍历与后序遍历构造二叉树。:根据一棵树的中序遍历与前序遍历构造二叉树。:你可以假设树中没有重复的元素。:你可以假设树中没有重复的元素。给定一个二叉树和一个目标和。原创 2024-11-05 21:36:41 · 355 阅读 · 0 评论 -
代码随想录第十五天| 110.平衡二叉树 、 257. 二叉树的所有路径 、404.左叶子之和、222.完全二叉树的节点个数
给定一个二叉树,判断它是否是平衡二叉树。平衡二叉树的定义是:对于每个节点,其左右子树的高度差不超过1。计算给定二叉树的所有左叶子节点的和。左叶子节点是指在父节点的左子树中且没有子节点的节点。给定一个二叉树,返回所有从根节点到叶子节点的路径。给定一个完全二叉树,求出该树的节点总数。原创 2024-11-04 21:50:41 · 393 阅读 · 0 评论