代码随想录算法训练营总结 | LeetCode

动态规划:

动态规划基础:初步体验动态规划五部曲的解题方法(1、确定dp数组含义。2、归纳出递推公式。3、初始化dp数组开头元素。4、确定遍历顺序。5、验证。),需要能够从题目中总结出随着数字变化的一般规律。

背包问题:在动态规划基础上丰富了数组含义,依旧是靠动态规划五步曲解题,不过在这一部分笔者认为需要重点搞清楚内外for循环各遍历什么,且遍历顺序是怎样的(大部分情况是外层遍历物品,内层遍历背包容量,且容量要倒序遍历,防止一个物品被放入数组多次)。

打家劫舍:这类问题dp数组的下表就不是代表容量了,而是代表最多处理到这个位置,前面的那些位置要怎样处理才能使结果最优要看题目的安排(让你要间隔一个处理啊等等)。

股票系列:股票系列题目和打家劫舍类似,下标也是代表遍历到的位置。遍历顺序和打家劫舍一样,也是顺序遍历。打家劫舍类题目更像一种状态转换,每次赋值给dp数组元素某个状态时,都要考虑它可以由什么状态转换而来。

子序列问题:子序列问题要注意锚定到背包问题上来,外层for循环是什么,内层for循环是什么,各代表什么含义,尤其注意dp[i]代表的是以数组i元素结尾的字符串的最长递增子序列(注意这个字序列是以i结尾,一定要包含i)。并且这类问题需要一个中间结果,每次求出子序列都要做比较把最大的子序列长度复制给这个中间变量,最后输出中间变量。而背包问题、打家劫舍、股票系列等问题则不需要中间结果,直接求出dp数组,最后输出dp[size-1]即可。

单调栈:

单调栈,顾名思义,以单调递增或者单调递减的顺序将数组的元素存入栈内。目的是在计算出每个元素对应的结果前将元素暂时保存在栈中,将来满足了要计算条件的时候,再将元素从栈中push出来。因为数组是从前往后遍历的,所以栈中元素的下标一定会遵从从小到大的顺序。

相关推荐
WindSearcher25 分钟前
大模型微调相关知识
后端·算法
取酒鱼食--【余九】35 分钟前
rl_sar实现sim2real的整体思路
人工智能·笔记·算法·rl_sar
Magnum Lehar2 小时前
vulkan游戏引擎test_manager实现
java·算法·游戏引擎
水蓝烟雨2 小时前
[面试精选] 0094. 二叉树的中序遍历
算法·面试精选
超闻逸事3 小时前
【题解】[UTPC2024] C.Card Deck
c++·算法
暴力求解3 小时前
C++类和对象(上)
开发语言·c++·算法
JKHaaa3 小时前
几种简单的排序算法(C语言)
c语言·算法·排序算法
让我们一起加油好吗3 小时前
【基础算法】枚举(普通枚举、二进制枚举)
开发语言·c++·算法·二进制·枚举·位运算
FogLetter3 小时前
微信红包算法揭秘:从随机性到产品思维的完美结合
算法
BUG收容所所长4 小时前
二分查找的「左右为难」:如何优雅地找到数组中元素的首尾位置
前端·javascript·算法