-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBestTimeToBuyAndSellStockIII.java
More file actions
29 lines (28 loc) · 1.02 KB
/
BestTimeToBuyAndSellStockIII.java
File metadata and controls
29 lines (28 loc) · 1.02 KB
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
/**
* 123. Best Time to Buy and Sell Stock III
* @author LBW
*/
public class BestTimeToBuyAndSellStockIII {
public int maxProfit(int[] prices) {
int n = prices.length;
int[][] dp = new int[n][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 < n; i++) {
dp[i][0] = 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 Math.max(Math.max(dp[n-1][0], dp[n-1][2]), dp[n-1][4]);
}
public static void main(String[] args) {
int[] prices = new int[]{3, 3, 5, 0, 0, 3, 1, 4};
BestTimeToBuyAndSellStockIII bestTimeToBuyAndSellStockIII = new BestTimeToBuyAndSellStockIII();
bestTimeToBuyAndSellStockIII.maxProfit(prices);
}
}