leetcode上有几道股票买卖问题,可用一种框架求解。
来自校招大神付东来,笔名labuladong.
121、Best Time to Buy and Sell Stock (Easy)
122、Best Time to Buy and Sell Stock II (Easy)
123/188、Best Time to Buy and Sell Stock III/IV (Hard)
第三题和第四题类似,就是限定了你的最大交易次数,只要解决第四题就行了,看题目:
309、Best Time to Buy and Sell Stock with Cooldown (Medium)
714、Best Time to Buy and Sell Stock with Transaction Fee (Medium)
题解
122题解:贪心做法是最好的解法,只要今天比昨天的价格好就昨天买入今天卖出。
其余直接默写框架求解即可:
121
123/188
个约束 k 直接套上面的框架,即可:
309
题目意思就是,你卖出之后,你的资金要冻结一天,不能第二天立即买入,至少要隔一天才能选择买入。套进框架,只要改一下子问题的参数就行了。
714
每次卖出需要手续费,套进框架,把手续费从利润中减掉即可。
总结一下,我们通过最简单的两个问题,形成了一套算法模板,快速解决了剩下的困难问题。通过备忘录技巧,保持时间复杂度在 O(N^2) 级别,虽不是最优的,但也是可行的。
优化:有一种状态机解法,三维DP