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

加餐|买卖股票:常见且必考的动态规划面试题

你好,我是卢誉声。
上一课我们介绍了动态规划面试问题中求方案总数和求可行性这两大类问题的通用解法,解题模版如下:
根据特征判断是否用动态规划来解;
确定初始化状态和状态参数;
确定状态存储数组(即备忘录);
写出关键的状态转移方程;
编写代码进行求解。
这样的解题模版(套路)是可以复用的,希望你能牢牢记住。今天,作为一节加餐课,我想给你介绍另一种常考的面试问题:买卖股票。这种问题的变种比较多,但依然可以用上述解题模版来解决所有买卖股票的问题,从而做到一通百通。

买卖股票问题

在技术面试环节,如果考察动态规划问题的话,那么买卖股票就是一类常考且经典的问题。这类问题一般来说属于求最优解(最大值和最小值)的范畴,下面我们看看这个问题到底是怎样的。

算法问题分析

问题:给定一个数组,它的第 个元素是一支给定的股票在第 天的价格。请你设计一个算法来计算你所能获取的最大利润,你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例1:
输入:[3, 3, 5, 0, 0, 3, 1, 4]
输出:6
解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3 - 0 = 3 。随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4 - 1 = 3 。
示例2
输入:[1, 2, 3, 4, 5]
输出:4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。需要注意的是,你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
示例3
输入:[7, 6, 4, 3, 1]
输出:0
解释:在这个情况下, 没有交易完成, 所以最大利润为 0
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了动态规划在技术面试中的应用,以买卖股票问题为例进行了详细分析。作者首先讨论了买卖股票问题的特点,指出其适合使用动态规划求解,并引出了状态转移方程的思路。通过分析股票利润与前一天利润的关系,提出了状态转移方程,并给出了Java和C++的代码实现。文章总结了攻破买卖股票问题的解题模板,强调了该类问题的灵活多变性。通过介绍动态规划解题模板和买卖股票问题的分析,为读者提供了解决类似问题的思路和方法。文章内容深入浅出,适合技术面试准备者阅读学习。文章还提供了一个实例化解题模板后的具体问题,以及状态转移方程的详细讲解,为读者提供了实用的技术知识。整体而言,本文对动态规划解题模板和买卖股票问题进行了全面而深入的介绍,为读者提供了宝贵的学习资源。

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

全部留言(5)

  • 最新
  • 精选
  • 我是一把火
    这道题目的备忘录设计得很巧妙,未持有的情况就是比较'哪天卖出"更好,持有的情况就是比较"哪天买入"更好,不知道我理解的对不对。

    作者回复: 从直观上来说的确可以这样理解,核心还是决定当日是否买入卖出的这个决策并根据决策来取最优解。

    2020-10-22
    4
  • 凉人。
    讲的很棒

    作者回复: 谢谢!一起学习,加油。

    2020-10-08
    3
  • 后视镜
    老师,我问下关于冷冻期,在 leetcode 309题目,我尝试着用上面的解题公式套入进去的时候发现冷冻期有些疑问,小于 t + 1 天的公式是不是就不适用了? 我理解 < t +1 天内,只能买卖一次。对于第 i 天持有股票的状态,DP[i][j](i < t+1),DP[i][1] = max(DP[i-1][1], -prices[i])。 1. 是不是在 < t+1 天只能挑股票最小的一天来持有? 2. 还是说 < t+1 天都是算是初始状态?

    作者回复: <t+1天的状态会在计算过程中逐步计算出来,实际上最后的结果就是挑选股票最小的一天持有。

    2022-06-28
  • xuanyuan
    状态参数的确定还是很难的,状态参数确定有更详细的思考方法吗?

    作者回复: 状态参数的确没有更加系统化的思考方法了,这个也就是动态规划最难的地方,但是如果能够理解动态规划的原理,就可以按照一种“感觉”去寻找这些状态参数,其实还是需要多加练习。

    2020-11-15
  • osun
    第一题的最大利润是否有更简便的方法,将数组后面减去前面,得到一个差值的数组,然后求最大子数组的和?当然sum肯定是大于等于0的

    作者回复: 第1题会有两次买入卖出,不可能直接求最大子数组的和,但是可以转换为两个子数组的最大和。但是即使转换一下问题也是需要用动态规划求解的。其实问题本身并没有本质简化。

    2020-10-07
    2
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部