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

动态规划:

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

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

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

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

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

单调栈:

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

相关推荐
xiaoshiguang33 小时前
LeetCode:222.完全二叉树节点的数量
算法·leetcode
爱吃西瓜的小菜鸡3 小时前
【C语言】判断回文
c语言·学习·算法
别NULL3 小时前
机试题——疯长的草
数据结构·c++·算法
TT哇3 小时前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
yuanbenshidiaos4 小时前
C++----------函数的调用机制
java·c++·算法
唐叔在学习4 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
ALISHENGYA5 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
chengooooooo5 小时前
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
算法·leetcode·职场和发展
jackiendsc5 小时前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
游是水里的游6 小时前
【算法day20】回溯:子集与全排列问题
算法