LeetCode每日一题,123. Best Time to Buy and Sell Stock III
先看题目描述
还是股票交易问题,给定数组 prices 表示股票每天的价格,限制最多进行两笔交易,问最大收益是多少
算法和思路
动态规划
这题实际上是 买卖股票的最佳时机IV 中 k = 2 的情况,是那道题的简化版,直接套用里面的代码,令 k = 2 就可以
算法源码
动态规划
1 | class Solution { |
下面是题解的代码,维护了四个状态:只进行过一次买操作;进行过一次买操作和一次卖操作;在完成了第一笔交易的前提下,进行了第二次买操作;完成了全部两笔交易。分别用 buy1,sell1,buy2,sell2 维护这四个状态的最大利润,状态转移方程如下:
- buy1 = max{buy1,-prices[i]}
- sell1 = max{buy1 + prices[i],sell1}
- buy2 = max{buy2,sell1 - prices[i]}
- sell2 = max{buy2 + prices[i],sell2}
1 | class Solution { |
题解的代码运行效率明显更高