[LeetCode] 哈希表 + 动态规划

立志18天刷完 hot 100 之 第一天 哈希表 (完成)

立志18天刷完 hot 100 之 第二天 动态规划

什么样的题目有动态规划的特征

1、最优子结构:问题的最优解可以由其子问题的最优解递归得到。
2、重叠子问题:问题可以分解为相同的子问题,这些子问题被重复求解。
3、无后效性:问题的当前状态可以通过过去的状态确定,与未来的状态无关。

动态规划的思路:

1、定义状态。定义问题的状态,通常涉及到需要求解的子问题。在这个问题中,状态可以定义为爬到第 i 阶楼梯的方法数。
2、找出转移方程。 建立子问题之间的关系,通常通过状态转移方程来表示。在这个问题中,如果要爬到第 i 阶楼梯,可以从第 i-1 或第 i-2 阶楼梯跨一步或两步而来。因此,状态转移方程为 dp[i] = dp[i-1] + dp[i-2]。
3、确定边界, 确定初始情况或边界条件,这是动态规划问题中一个重要的考虑因素。在这个问题中,初始条件是 dp[0] = 1(起始位置),dp[1] = 1(爬一阶楼梯)。
4、自底向上的计算。从初始状态开始逐步计算到目标状态,通常使用迭代的方式。在这个问题中,可以使用循环从 2 开始迭代到 n。

刷题目有
1、爬楼梯
2、杨辉三角
3、打家劫舍(dp[i] = max(dp[i-1], dp[i-2] + nums[i-1])
4、完全平方数(dp[i]=min(dp[i],dp[i−j×j]+1)
5、零钱兑换(dp[i]=min(dp[i],dp[i−coin]+1)
6、单词拆分(dp[i]=dp[i−word_len] && word_Dict.includes(s.substring(i−word_len,i))
7、最长递增子序列(dp[i]=max(dp[i],dp[j]+1)
8、乘积最大子数组
9、分割等和子集
10、最长有效括号

你可能感兴趣的:(leetcode,散列表,动态规划)