05|面试即正义第一期:什么样的问题应该使用动态规划?
动态规划是一种思想
- 深入了解
- 翻译
- 解释
- 总结
动态规划是一种重要的算法思想,它不仅仅是一种算法,更是一种指导解决问题的思想。本文总结了动态规划问题的特点和适用场景,帮助读者快速了解动态规划的基本概念。文章列举了几个典型的面试题,包括乘积最大子数组、最长回文子串、最长上升子序列等,并分析了它们为什么适合使用动态规划来解决。强调了动态规划是一种思想,需要根据问题特点来灵活运用。此外,还介绍了动态规划问题的分类,包括求最优解、求可行性和求方案总数等。同时,文章提醒读者在面对问题时要注意数据是否可排序或可交换,以避免将非动态规划问题误解为动态规划问题。通过本文的总结,读者可以快速了解动态规划的基本概念和适用场景,为面试和工程实践提供了有益的指导。
《动态规划面试宝典》,新⼈⾸单¥59
全部留言(9)
- 最新
- 精选
- 落曦动态规划问题,先看如何进行穷举,再去找重叠子问题以及无后效性,以及最优子结构 通常要求的题目为最优解问题,最大值,最小值所构成的最优方案,方案总数,就是能够实现的方案数量。
作者回复: 总结的很对,顶上去让跟多人看到。
2020-10-2018 - Ethan Liu老师 全排列那里 数据不可交换是什么意思?与重叠子问题有什么关系?
作者回复: 举个例子,给定一个数组 [2, 3, 1, 6, 7],如果要求最长上升子串,我们该怎么求呢? 需要做排列组合,找到最长的那个吧?那么如果数据“可交换”,会发生什么? 如果我们把数组重新排序,那么原问题也就不复存在了。所以当原问题可以重新排序时,那么那个问题不用动态规划来解,因为不需要穷举。 比如说,我们还是上面的数组作为输入,但问的问题是数组中最大值是什么?那么你可以先排序,然后取开头或结尾的值,就是你要的答案了。 这里想强调说明的是,并非看到数组或字符串问题都需要使用动态规划来求解。也许朴素的算法能更快得到解。
2020-09-262 - 猫头鹰爱拿铁感觉字符串的动态规划题都比较难。
作者回复: 字符串的动态规划是特定的一类动态规划问题,这类问题在后面的子数组和子序列问题中会详细讲解,并给出求解模板和套路。 建议阅读参考一下。
2020-10-091 - Scott子是不是子数组一般用一维数组保存状态,而子序列一般用二维?
作者回复: 这跟状态参数的定义是有极大关系的。在后面讲解12课动态规划新问题2的时候,你就会发现即便是子数组问题,也需要高维备忘录来存储中间计算的过程。 具体问题具体分析。因此,简单的子数组问题可以认为只需要一维数组作为备忘录就可以解决问题;子序列问题一般需要高维数组作为备忘录解决问题。 但这不是绝对的。在学习了后面的思路分析和解题步骤后,相信你会有新的认识。
2020-09-301 - alex_lai字符串交错问题跟路径规划不是很像。 相当于在判断当前已走过路径(已取的子字符串)上多加了一些条件判断
作者回复: 但是一般路径规划不会考虑重复走过同一个节点,所以这里性质还是不太一样的。
2022-01-24 - 沉淀的梦想如果子数组改成子序列的话,好像都没必要用动态规划了,比如最大子序列和,直接将所有正数相加即可,如果没有正数,则取最大的一个负数。
作者回复: 这个是在特定场景下可以用特殊设计的贪心算法来解决问题,但是这种思路无法解决更多的问题,所以我们才需要学习如何通过动态规划解决问题,这也是使用动态规划解决的最简单的一类问题了。
2020-12-14 - 山茶花老师你好,请问后面是否有完全背包问题求第K优解的相关讲解呢?当前我遇到了类似问题,目前使用的是穷举+备忘录法解决的,希望可以有相关讲解
作者回复: 请阅读一下 06 和 07 课针对背包问题的完整阐述。 在讲解完全背包的部分,里面有详细的讲解。
2020-09-23 - Mr.郑先生_🦁乘积最大子数组的示例二,输出不应该是3么?2020-10-072
- 风清扬这里是不是可以列下在leetcode上对应的题号?方便刷题验证问题的理解。2023-03-04归属地:广东1