- 博客(62)
- 收藏
- 关注
原创 一个故事秒懂强化学习与GRPO
这篇内容通过一个生活化的故事,让我们从感性上理解强化学习是怎么做的,以及它是如何一步步对以往的方法进行改进,最终发展成GRPO这项技术。
2025-03-31 16:31:10
254
原创 代码随想录一刷完结
非常偶然的机会让我看到这个算法训练营的存在,虽然我也没有多大的动力,但当时就觉得没什么事情,想着刷刷题,为以后找工作打打基础。
2024-10-06 16:02:12
459
原创 代码随想录Day 62|Floyd 算法精讲、A \* 算法精讲 (A star算法),题目:97. 小明逛公园、127. 骑士的攻击
BFS是解决最短路径问题的有效方法,但在大规模数据下可能会超时。需要考虑算法优化和数据结构的选择来提高效率。dijkstra朴素版dijkstra堆优化版Bellman_ford 队列优化算法(又名SPFA)bellman_ford 算法判断负权回路bellman_ford之单源有限最短路Floyd 算法精讲启发式搜索:A * 算法这段文字提供了一个关于最短路径算法选择的指导,以及它们各自的使用场景。Dijkstra算法:适用于边权重全为正的情况。
2024-10-06 15:34:09
2261
原创 代码随想录Day 60|SPFA算法,bellman_ford之判断负权回路,bellman_ford之单源有限最短路,题目:城市间货物运输
适应负权边:能处理有负数权重的边。重复松弛:通过反复更新路径权重来找最短路。检测负权环:可以发现图中是否存在越走越短的环。
2024-09-28 23:45:34
882
原创 代码随想录Day 59|图论Part09,dijkstra(堆优化版)精讲、Bellman_ford算法精讲
Bellman-Ford算法的重点处理负权边:Bellman-Ford算法能够处理包含负权边的图,这与Dijkstra算法不同,后者只适用于非负权边的图。迭代松弛:算法通过反复进行松弛操作来尝试更新每个节点的最短路径估计,通常需要进行n-1次迭代,其中n是节点的数量。如果在第n次迭代中仍然可以更新路径,这表明存在负权环。
2024-09-28 23:31:44
2296
原创 代码随想录Day 58|拓扑排序、dijkstra算法精讲,题目:软件构建、参加科学大会
拓扑排序精讲拓扑排序是针对有向无环图(DAG)的一种排序算法,目的是将图中的所有顶点排成一个线性序列,使得对于任何一条有向边(U \rightarrow V),顶点(U)都在顶点(V)的前面。这个过程可以用来检测图中是否存在环,因为如果无法完成排序,则说明图中有环。拓扑排序的关键在于每次选择入度为0的顶点加入排序结果,并更新相关顶点的入度。Dijkstra(朴素版)精讲Dijkstra算法是一种计算单源最短路径的算法,适用于边权重为非负数的图。
2024-09-27 23:47:53
1369
2
原创 代码随想录Day 57|prim算法和kruskal算法精讲,题目:寻宝
目标:最小生成树的目标是以最小的成本连接图中的所有节点。方法:Prim算法从节点出发,逐步构建最小生成树。Kruskal算法从边出发,按权重顺序构建最小生成树。在Prim算法的最后,我们成功构建了一棵最小生成树,其中绿色的边展示了连接所有节点的最小权值路径。通过始终选择距离已有最小生成树最近的节点加入,我们确保了总权值最小化。minDist数组在整个过程中起到了关键作用,它记录了所有非生成树节点到生成树的最小距离,这些距离实际上代表了最小生成树边的权值。
2024-09-27 23:30:02
1105
原创 代码随想录Day 56|题目:冗余连接、109. 冗余连接II
并查集是解决无向图中边的删除问题的有效工具。通过从后向前遍历边,并使用并查集判断和合并操作,可以找到可删除的边。路径压缩技巧可以提升并查集的性能。int n;// 节点数量// 按照节点大小范围定义数组// 并查集初始化i u 这条边加入并查集// 寻找u的根// 寻找v的根// 如果发现根相同,则说明在一个集合,不用两个节点相连直接返回int s, t;
2024-09-24 23:35:02
983
原创 代码随想录Day 55|题目:并查集理论基础、107. 寻找存在的路径
并查集是解决特定问题的强大工具,通过路径压缩和按秩合并可以提高其效率。理解并查集的内部工作原理对于正确使用它至关重要。通过模拟和实践,可以加深对并查集工作机制的理解。并查集是处理图中节点连通性问题的利器。通过将图中的边加入到并查集,你可以快速判断任意两个节点是否连通。路径压缩技巧可以大幅提升并查集的性能。
2024-09-24 23:20:02
1340
原创 代码随想录Day 53|题目:110. 字符串接龙、105.有向图的完全可达性、106. 岛屿的周长
图的表示:理解邻接表或邻接矩阵在表示图中的作用。深度优先搜索(DFS):掌握DFS的递归实现,用于遍历图中的节点。广度优先搜索(BFS):掌握BFS的层次遍历方法,用于查找最短路径。
2024-09-24 23:02:06
1180
原创 代码随想录Day 52|题目:101.孤岛的面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿
图论,DFS、BFS、并查集(优化),坚持!!!
2024-09-22 15:03:24
1009
原创 代码随想录Day 51|题目:99.岛屿数量、100.岛屿的最大面积
BFS、DFS、并查集解决岛屿问题算法选择BFS:适用于层级遍历,可以找到最短路径,适合于岛屿问题因为它可以逐层扩展,直到所有相连的陆地都被访问。DFS:适用于深度遍历,可以探索所有可能的路径,适合于岛屿问题因为它可以深入探索每个岛屿直到尽头。并查集:适用于处理动态连通性问题,通过合并操作来识别和跟踪连通的组件,适合于岛屿问题因为它可以快速判断和合并相连的陆地。实现方式BFS:使用队列存储待访问的节点,逐层访问,每访问一个陆地节点,就将其所有未访问的相邻陆地节点加入队列。DFS。
2024-09-21 21:09:23
1345
原创 代码随想录Day50|图论Part01,leetcode题目:98. 所有可达路径
BFS是一种有效的图遍历算法,特别适用于在无权图中寻找最短路径。它通过逐层搜索和使用队列来管理待访问的节点,确保每个节点都被访问且只被访问一次。一旦找到目标节点,就可以通过回溯确定最短路径。
2024-09-20 01:05:27
1311
原创 代码随想录Day 49|leetcode题目:42.接雨水、84.柱状图中最大矩形
*单调栈的应用:**通过单调栈,我们可以高效地找到每个柱子左侧和右侧最高的柱子,从而计算出在两个最高柱子之间较低的柱子上能接多少雨水。单调栈保证了栈内元素的高度是单调递增或递减的,这使得我们可以在遍历过程中快速更新和查询最大高度。避免重复计算:在双指针优化解法中,我们通过预先计算并存储每个位置的maxLeft和maxRight值来避免在计算雨水量时的重复计算。而在单调栈解法中,我们通过维护一个单调递增的栈来确保每个柱子的左右最大高度只被计算一次,进一步提高了算法的效率。直观理解:接雨水问题。
2024-09-19 00:42:33
1168
原创 代码随想录Day 48|单调栈,leetcode题目:739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II
单调栈是一种特殊的栈结构,它在算法中用于处理与序列顺序相关的问题,尤其是那些需要找到序列中元素的后续或前置元素满足某种单调性条件的问题。
2024-09-17 12:37:07
788
原创 代码随想录Day 46|动态规划完结,leetcode题目:647. 回文子串、516.最长回文子序列
确定dp数组(dp table)以及下标的含义:定义dp数组,明确其每个元素代表的含义。确定递推公式:找出状态转移方程,即dp数组元素之间的关系。dp数组如何初始化:设定dp数组的初始值,对于边界情况特别重要。确定遍历顺序:决定填充dp数组的顺序,通常与递推公式相关。举例推导dp数组:通过具体例子来手动推导dp数组,验证算法的正确性。
2024-09-17 12:34:23
1288
原创 代码随想录Day 45|leetcode题目:115.不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
判断子序列:判断一个字符串是否为另一个字符串的子序列,只涉及删除操作。不同的子序列:计算一个字符串在另一个字符串子序列中出现的次数,涉及删除操作。两个字符串的删除操作:计算使两个字符串相同的最少删除次数,涉及两个字符串的删除操作。
2024-09-16 01:11:51
873
原创 代码随想录Day 44|leetcode题目:1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列
只考虑了编辑距离中的删除操作,而没有涉及插入和替换,这降低了问题的复杂性。动态规划应用:通过动态规划方法,使用二维数组dp来记录和计算子问题的解,其中dp[i][j]表示考虑字符串s的前i个字符和字符串t的前j个字符时的最长相同子序列的长度。状态转移匹配情况:如果s[i - 1]等于t[j - 1],则在之前的基础上增加1,即。不匹配情况:如果s[i - 1]不等于t[j - 1],则取忽略s的当前字符或忽略t的当前字符所得到的最大长度,即。
2024-09-16 01:09:55
785
原创 代码随想录Day 43|leetcode题目:300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
状态定义300. 最长递增子序列:定义dp[i]为考虑到第i个元素时,能形成的最长递增子序列的长度。674. 最长连续递增序列:定义dp[i]为以第i个元素结尾的最长连续递增序列的长度。718. 最长重复子数组:定义dp[i][j]为数组A的后i个元素和数组B的后j个元素的最长重复子数组长度。状态转移方程300对所有j < i,如果。674如果,否则dp[i] = 1。718如果,否则。初始化和遍历顺序初始化:所有dp数组的初始值需要根据问题的具体要求来设定,通常是0或1。
2024-09-13 20:41:07
1182
原创 代码随想录Day 42|leetcode题目:188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费
买卖一次最佳时机问题,目的是找到买入和卖出的最佳时间点以获得最大利润。贪心策略:只需找到价格最低点买入,价格最高点卖出。买卖多次可以多次买卖,关键是找到所有价格差的最大值。动态规划或贪心策略:累加所有正的价格差。最多买卖两次动态规划:维护两个状态,持有股票和不持有股票的最大收益。关键是找到两次买入和卖出的最佳时机。买卖k次动态规划:对于每一次交易,都找到买入和卖出的最佳时机。状态转移复杂,需要考虑所有可能的交易组合。冷冻期在某些问题中,卖出股票后需要等待一天才能再次买入。
2024-09-13 20:19:11
1301
1
原创 代码随想录Day 41|动态规划之买卖股票问题,leetcode题目121. 买卖股票的最佳时机、122. 买卖股票的最佳时机Ⅱ、123. 买卖股票的最佳时机Ⅲ
买卖股票的最佳时机问题是一个经典的动态规划问题,旨在确定在给定的股票价格列表中买卖股票的最佳时机以最大化利润。状态定义定义dp[i][0]表示第i天不持有股票的最大利润。定义dp[i][1]表示第i天持有股票的最大利润。状态转移方程:不持有股票的状态可以是前一天不持有的延续,或者是前一天持有但在今天卖出了股票。:持有股票的状态可以是前一天就持有的延续,或者是在今天买入了股票。初始化和遍历初始化dp[0][0]为 0,表示在第0天不持有股票的利润为0。初始化dp[0][1]为。
2024-09-11 00:15:25
1474
原创 代码随想录Day 39|打家劫舍问题,leetcode题目:198.打家劫舍、213.打家劫舍Ⅱ、337.打家劫舍Ⅲ
打家劫舍问题是一个经典的动态规划问题,通常用来描述在一系列房屋中进行选择以最大化收益的场景,同时遵守一定的约束(如不能连续偷窃相邻的房屋)。状态定义定义dp[i]为考虑到第i个房屋时,能够偷窃到的最大金额。状态转移方程状态转移考虑两种情况:偷窃当前房屋(,其中nums[i]是第i个房屋的金额)和不偷窃当前房屋(因此,,这表示可以选择偷窃当前房屋(此时不能偷窃前一个房屋)或者不偷窃当前房屋。边界条件初始化dp[0]为 0,表示没有房屋时的金额为 0。dp[1]
2024-09-09 01:34:49
855
原创 代码随想录Day 38|背包问题完结,题目322.零钱兑换、279.完全平方数、139,单词拆分数
关于这几种常见的背包,其关系如下:通过这个图,可以很清晰分清这几种常见背包之间的关系。在讲解背包问题的时候,我们都是按照如下五部来逐步分析,相信大家也体会到,把这五部都搞透了,算是对动规来理解深入了。确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组这五部里哪一步都很关键,但确定递推公式和确定遍历顺序都具有规律性和代表性递归公式:能否装满背包或最多装多少:用更新,如分割等和子集和最后一块石头的重量 II。装满背包的方法数:用。
2024-09-08 23:55:54
1118
原创 代码随想录Day 37|完全背包理论,题目:518.零钱兑换Ⅱ、377.组合总和Ⅱ、70.爬楼梯进阶
完全背包理论无限使用:每种物品可以无限使用,没有数量限制。状态转移:当前物品的价值是之前所有价值的累加,即,表示加上当前物品后的新价值。循环顺序:通常从小到大遍历物品和背包容量,确保每次计算时使用的是未包含当前物品的旧价值。
2024-09-08 13:28:03
728
原创 代码随想录Day 36|滑铁卢了,leetcode题目:1049.最后一块石头的重量、494.目标和、474.一和零
leetcode题目链接今天学习的内容,学的很泛,没太明白,坚持!!
2024-09-07 01:28:27
1198
2
原创 代码随想录Day 35|动态规划,二维dp数组,滚动数组,leetcode题目:416.分割等和子集
选择二维还是一维数组解法取决于问题的结构和状态转移的特性。二维数组解法在处理多维决策问题时更直观,而一维数组解法在空间优化方面更有效。在实际应用中,一维数组解法常常通过倒序遍历或其他技巧来避免状态覆盖问题,确保每个状态的最优解被正确计算。
2024-09-05 00:01:52
930
原创 代码随想录Day 34|leetcode题目:62.不同路径、63.不同路径Ⅱ、343整数拆分、96.不同的二叉搜索树
路径问题,只能向右或者向下有障碍的路径问题,如果有障碍后面的就不用再继续遍历。
2024-09-03 23:17:55
915
原创 代码随想录Day 32|leetcode题目:501.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯
动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的动态规划五部曲:动态规划数组和下标的定义,递归公式,动态数组的初始化,确定遍历顺序,推导数组。动态规划的一些技巧,能维护变量就不要维护数组。
2024-09-01 23:30:00
2000
1
原创 代码随想录Day 31|leetcode题目:56.合并区间、738.单调递增的数字、968.监控二叉树
究竟什么题目是贪心呢?如果找出局部最优并可以推出全局最优,就是贪心,如果局部最优都没找出来,就不是贪心,可能是单纯的模拟。
2024-09-01 12:19:32
1229
原创 代码随想录Day 30|leetcode题目:452.用最少数量的箭引爆气球、435.无重叠区间、763.划分字母区间
无重叠区间的思路都比较巧妙。贪心的思想没有那么清晰。
2024-08-30 23:18:49
1028
原创 昨天还好好的电脑,今天突然很卡,卡到崩溃,卡到怀疑人生。
原本早早来工位看实验,然后赶一下进度,来了之后,打开电脑,鼠标卡着不动,界面切也显示不出来,卡的要命,卡的一直黑屏。以上方法,我都尝试了,还是不行,卡的一直爆黑屏,也不知道是什么原因,就昨天还好好的。再次打开之后还是不行,我又觉得是网络的问题,然后插了旁边的网线,然后也还是不行。方法一:win+r跳出输入框,输入%temp%,将这个临时文件的内容,全选删除。然后我以为是我昨天电脑没关待机的状态,我直接关上了,重启了。最后就差打开主机,清理显卡和内存了,但是我没有工具,哭晕。方法四:尝试了防静电的操作。
2024-08-30 13:16:46
1166
原创 代码随想录Day 29|leetcode题目:134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列
两个维度的时候,要注意先确定一个维度,进而确定第二个维度不同的;数据结构的使用,效率会差挺多。
2024-08-30 00:04:48
1241
原创 代码随想录Day 28|题目:122.买卖股票的最佳时机Ⅱ、55.跳跃游戏、45.跳跃游戏Ⅱ、1005.K次取反后最大化的数组和
简单题目使用贪心算法,培养贪心的意识。
2024-08-28 20:34:01
1130
原创 代码随想录Day 27|贪心算法,题目:455.分发饼干、376.摆动序列、53.最大子序和
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。贪心算法是“走一步看一步”,而动态规划是“先规划再行动贪心算法适合那些每一步的局部最优选择能够导致全局最优解的问题;动态规划适合那些问题可以分解成重叠子问题,且可以通过解决这些子问题来构建原问题解的情况。经典问题:背包问题假设你是一个小偷,偷到了一个背包,背包的容量有限(比如10公斤)。你面前有若干件物品,每件物品都有自己的重量和价值。你希望带走尽可能多的价值,但同时不能超过背包的重量限制。贪心算法的基本理论,局部最优但不一定是全局最优。
2024-08-27 18:40:13
1113
原创 代码随想录Day 25|回溯篇完结,题目:491.递增子序列、46、全排列、47.全排列Ⅱ
使用unordered_set,作为去重的逻辑。只限于自增子序列,不能手动排序。全排列无startIndex的使用,顺序是必要的。使用used数组,在排列问题上,树层和树枝去重都可以。
2024-08-25 23:58:07
629
原创 代码随想录Day 24| 回溯算法Part03,题目:93.复原IP地址、78.子集、90.子集Ⅱ
分割字串,判断字串是否合法去重逻辑,使用used数组(或者startIndex)
2024-08-25 11:49:42
874
原创 代码随想录Day 23|回溯Part02,39.组合总和、40.组合总和Ⅱ、131.分割回文串
回溯问题的进阶,判断回文串,可以重复选取元素,使用used数组。
2024-08-24 16:41:11
847
原创 代码随想录Day 22| 回溯算法开篇,77.组合、216组合总和Ⅲ、17.电话号码的字母组合
回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 回溯是递归的副产品,只要有递归就会有回溯。回溯算法的基本理论回溯法的组合问题回溯算法也是暴力搜索,他解决的是for循环层数过多,无法实现的问题。要自己多敲一下代码,注意细节的问题。
2024-08-23 11:56:58
750
原创 实在没想到跑模型指标的时候卡这里了| AutoModelforcauselLM,报显存溢出
显存溢出问题通常与模型大小、显存优化配置、并行策略、模型精度和中间变量管理有关。通过适当的调整和优化,可以有效地解决显存溢出问题。
2024-08-22 18:57:35
623
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人