力扣-123. 买卖股票的最佳时机 III
Java代码如下:
class Solution { int inf = 0x3f3f3f3f; public int maxProfit(int[] prices) { /* * dp[i][j][k]:i表示天数,j表示当前是否持股(j=0、1),k表示卖出的次数(k=0、1、2) */ int n = prices.length; int[][][] dp = new int[n][2][3]; // 第一天没有操作 dp[0][0][0] = 0; // 第一天不能直接卖出 dp[0][0][1] = -inf; dp[0][0][2] = -inf; dp[0][1][0] = -prices[0]; // 第一天不能直接卖出 dp[0][1][1] = -inf; dp[0][1][2] = -inf; for (int i = 1; i < n; i++) { dp[i][0][0] = 0; dp[i][0][1] = Math.max(dp[i-1][1][0] + prices[i], dp[i-1][0][1]); dp[i][0][2] = Math.max(dp[i-1][1][1] + prices[i], dp[i-1][0][2]); // 第i天买入,第i天之前就买入了 dp[i][1][0] = Math.max(dp[i-1][0][0] - prices[i], dp[i-1][1][0]); dp[i][1][1] = Math.max(dp[i-1][0][1] - prices[i], dp[i-1][1][1]); dp[i][1][2] = -inf; } return Math.max(Math.max(dp[n-1][0][1], dp[n-1][0][2]), 0); } }
作者:Ryanjie
出处:http://www.cnblogs.com/ryanjan/
本文版权归作者和博客园所有,欢迎转载。转载请在留言板处留言给我,且在文章标明原文链接,谢谢!
如果您觉得本篇博文对您有所收获,觉得我还算用心,请点击右下角的 [推荐],谢谢!