dfs(i, hold) return int 如果要持有股票, 则最大利润为max(dfs(i-1, 1), dfs(i-1, 0) - prices[i]) 如果要不持有股票, 则最大利润为max(dfs(i-1, 0), dfs(i-1, 0) + prices[i])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| class Solution { int[][] m;
public int maxProfit(int[] prices) { int len = prices.length; m = new int[len][2]; for (int[] row : m) { Arrays.fill(row, Integer.MIN_VALUE); } return dfs(prices, prices.length-1, 0); }
private int dfs(int[] prices, int i, int hold) { if (i < 0) { return hold == 0 ? 0 : Integer.MIN_VALUE / 2; } if (m[i][hold] != Integer.MIN_VALUE) { return m[i][hold]; }
if (hold == 1) { return m[i][hold] = Math.max(dfs(prices, i-1, 0) - prices[i], dfs(prices, i-1, hold)); } return m[i][hold] = Math.max(dfs(prices, i-1, 1) + prices[i], dfs(prices, i-1, hold));
} }
|