题目链接
题目分析
非常经典的股票买卖问题了,股票一共有两种状态:天数和持有或者不持有。我们只需要处理好base cases就可以顺着推下去做了。这里要注意它含有1天的冷却期,那么我们在处理持有股票的时候要注意,买入股票必须要在前天不持有股票的情况下进行了~
代码实现
class Solution {
public int maxProfit(int[] prices) {
if(prices.length < 2){
return 0;
}
int[][] dp = new int[prices.length][2];
dp[0][1] = -prices[0];
dp[1][0] = Math.max(0, prices[1] + dp[0][1]);
dp[1][1] = Math.max(-prices[0], -prices[1]);
for(int i = 2; i < dp.length; i++){
dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1] + prices[i]);
dp[i][1] = Math.max(dp[i-1][1], dp[i-2][0] - prices[i]);
}
return dp[dp.length - 1][0];
}
}
总结
股票问题非常的经典,LC上有6道股票DP问题,非常值得深究。这里贴一个股票问题通解的题解