leetcode上有几道股票买卖问题,可用一种框架求解。
来自校招大神付东来,笔名labuladong.


121、Best Time to Buy and Sell Stock (Easy)

买卖股票问题 - 图1

122、Best Time to Buy and Sell Stock II (Easy)

买卖股票问题 - 图2

123/188、Best Time to Buy and Sell Stock III/IV (Hard)

第三题和第四题类似,就是限定了你的最大交易次数,只要解决第四题就行了,看题目:

买卖股票问题 - 图3

309、Best Time to Buy and Sell Stock with Cooldown (Medium)

买卖股票问题 - 图4

714、Best Time to Buy and Sell Stock with Transaction Fee (Medium)

买卖股票问题 - 图5



题解

122题解:贪心做法是最好的解法,只要今天比昨天的价格好就昨天买入今天卖出。


其余直接默写框架求解即可:

121

买卖股票问题 - 图6

123/188

个约束 k 直接套上面的框架,即可:

买卖股票问题 - 图7

309

题目意思就是,你卖出之后,你的资金要冻结一天,不能第二天立即买入,至少要隔一天才能选择买入。套进框架,只要改一下子问题的参数就行了。

买卖股票问题 - 图8

714

每次卖出需要手续费,套进框架,把手续费从利润中减掉即可。

买卖股票问题 - 图9


总结一下,我们通过最简单的两个问题,形成了一套算法模板,快速解决了剩下的困难问题。通过备忘录技巧,保持时间复杂度在 O(N^2) 级别,虽不是最优的,但也是可行的。


优化:有一种状态机解法,三维DP

https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247484508&idx=1&sn=42cae6e7c5ccab1f156a83ea65b00b78&chksm=9bd7fa54aca07342d12ae149dac3dfa76dc42bcdd55df2c71e78f92dedbbcbdb36dec56ac13b&scene=21#wechat_redirect