
动态规划
class Solution { public int maxProfit(int[] prices) { /**dp[i][0] 没有操作 * dp[i][1] 第一次买入 * dp[i][2] 第一次卖出 * dp[i][3] 第二次买入 * dp[i][4] 第二次卖出 */ int size = prices.length; int [][] dp = new int[size][5]; dp[0][0] = 0; dp[0][1] = -prices[0]; dp[0][2] = 0; dp[0][3] = -prices[0]; dp[0][4] = 0; for(int i = 1; i < size; i++ ) { dp[i][0] = dp[i - 1][0]; dp[i][1] = Math.max(dp[i - 1][1],dp[i - 1][0] - prices[i]); dp[i][2] = Math.max(dp[i - 1][2],dp[i - 1][1] + prices[i]); dp[i][3] = Math.max(dp[i - 1][3],dp[i - 1][2] - prices[i]); dp[i][4] = Math.max(dp[i - 1][4],dp[i - 1][3] + prices[i]); } return dp[size - 1][4]; }}
优化空间
class Solution { public int maxProfit(int[] prices) { /**dp[0] 没有操作 * dp[1] 第一次买入 * dp[2] 第一次卖出 * dp[3] 第二次买入 * dp[4] 第二次卖出 */ int size = prices.length; int [] dp = new int[5]; dp[0] = 0; dp[1] = -prices[0]; dp[2] = 0; dp[3] = -prices[0]; dp[4] = 0; for(int i = 1; i < size; i++ ) { dp[0] = dp[0]; dp[1] = Math.max(dp[1],dp[0] - prices[i]); dp[2] = Math.max(dp[2],dp[1] + prices[i]); dp[3] = Math.max(dp[3],dp[2] - prices[i]); dp[4] = Math.max(dp[4],dp[3] + prices[i]); } return dp[4]; }}