动态规划面试宝典
卢誉声
Autodesk 首席工程师
9629 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 23 讲
动态规划面试宝典
15
15
1.0x
00:00/00:00
登录|注册

05|面试即正义第一期:什么样的问题应该使用动态规划?

你好,我是卢誉声。
作为“初识动态规划”模块的最后一课,今天我们不谈具体的解决方案了,我们来聊聊面试相关的话题,做个总结,也为我们后面的深入学习打下一个良好的基础。
那说起动态规划,我不知道你有没有这样的困扰,在掌握了一些基础算法和数据结构之后,碰到一些较为复杂的问题还是无从下手,面试时自然也是胆战心惊。如果我说动态规划是个玄幻的问题其实也不为过。究其原因,我觉得可以归因于这样两点:
你对动态规划相关问题的套路和思想还没有完全掌握;
你没有系统地总结过究竟有哪些问题可以用动态规划解决。
知己知彼,你想把动态规划作为你的面试武器之一,就得足够了解它;而应对面试,总结、归类问题其实是个不错的选择,这在我们刷题的时候其实也能感觉得到。
那么今天,我们就针对以上两点,系统地谈一谈究竟什么样的问题可以用动态规划来解。相信这节课过后,你就能有针对性地攻克难关了,无论是面试还是工程实践都能做到有的放矢。

动态规划是一种思想

动态规划算法,这种叫法我想你应该经常听说。嗯,从道理上讲这么说我觉得也没错,首先动态规划它不是数据结构,这一点毋庸置疑,并且严格意义上来说它就是一种算法。但更加准确或者更加贴切的提法应该是说动态规划是一种思想。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

动态规划是一种重要的算法思想,它不仅仅是一种算法,更是一种指导解决问题的思想。本文总结了动态规划问题的特点和适用场景,帮助读者快速了解动态规划的基本概念。文章列举了几个典型的面试题,包括乘积最大子数组、最长回文子串、最长上升子序列等,并分析了它们为什么适合使用动态规划来解决。强调了动态规划是一种思想,需要根据问题特点来灵活运用。此外,还介绍了动态规划问题的分类,包括求最优解、求可行性和求方案总数等。同时,文章提醒读者在面对问题时要注意数据是否可排序或可交换,以避免将非动态规划问题误解为动态规划问题。通过本文的总结,读者可以快速了解动态规划的基本概念和适用场景,为面试和工程实践提供了有益的指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《动态规划面试宝典》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 落曦
    动态规划问题,先看如何进行穷举,再去找重叠子问题以及无后效性,以及最优子结构 通常要求的题目为最优解问题,最大值,最小值所构成的最优方案,方案总数,就是能够实现的方案数量。

    作者回复: 总结的很对,顶上去让跟多人看到。

    2020-10-20
    18
  • Ethan Liu
    老师 全排列那里 数据不可交换是什么意思?与重叠子问题有什么关系?

    作者回复: 举个例子,给定一个数组 [2, 3, 1, 6, 7],如果要求最长上升子串,我们该怎么求呢? 需要做排列组合,找到最长的那个吧?那么如果数据“可交换”,会发生什么? 如果我们把数组重新排序,那么原问题也就不复存在了。所以当原问题可以重新排序时,那么那个问题不用动态规划来解,因为不需要穷举。 比如说,我们还是上面的数组作为输入,但问的问题是数组中最大值是什么?那么你可以先排序,然后取开头或结尾的值,就是你要的答案了。 这里想强调说明的是,并非看到数组或字符串问题都需要使用动态规划来求解。也许朴素的算法能更快得到解。

    2020-09-26
    2
  • 猫头鹰爱拿铁
    感觉字符串的动态规划题都比较难。

    作者回复: 字符串的动态规划是特定的一类动态规划问题,这类问题在后面的子数组和子序列问题中会详细讲解,并给出求解模板和套路。 建议阅读参考一下。

    2020-10-09
    1
  • Scott
    子是不是子数组一般用一维数组保存状态,而子序列一般用二维?

    作者回复: 这跟状态参数的定义是有极大关系的。在后面讲解12课动态规划新问题2的时候,你就会发现即便是子数组问题,也需要高维备忘录来存储中间计算的过程。 具体问题具体分析。因此,简单的子数组问题可以认为只需要一维数组作为备忘录就可以解决问题;子序列问题一般需要高维数组作为备忘录解决问题。 但这不是绝对的。在学习了后面的思路分析和解题步骤后,相信你会有新的认识。

    2020-09-30
    1
  • alex_lai
    字符串交错问题跟路径规划不是很像。 相当于在判断当前已走过路径(已取的子字符串)上多加了一些条件判断

    作者回复: 但是一般路径规划不会考虑重复走过同一个节点,所以这里性质还是不太一样的。

    2022-01-24
  • 沉淀的梦想
    如果子数组改成子序列的话,好像都没必要用动态规划了,比如最大子序列和,直接将所有正数相加即可,如果没有正数,则取最大的一个负数。

    作者回复: 这个是在特定场景下可以用特殊设计的贪心算法来解决问题,但是这种思路无法解决更多的问题,所以我们才需要学习如何通过动态规划解决问题,这也是使用动态规划解决的最简单的一类问题了。

    2020-12-14
  • 山茶花
    老师你好,请问后面是否有完全背包问题求第K优解的相关讲解呢?当前我遇到了类似问题,目前使用的是穷举+备忘录法解决的,希望可以有相关讲解

    作者回复: 请阅读一下 06 和 07 课针对背包问题的完整阐述。 在讲解完全背包的部分,里面有详细的讲解。

    2020-09-23
  • Mr.郑先生_🦁
    乘积最大子数组的示例二,输出不应该是3么?
    2020-10-07
    2
  • 风清扬
    这里是不是可以列下在leetcode上对应的题号?方便刷题验证问题的理解。
    2023-03-04归属地:广东
    1
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部