LeetCode 309. 最佳買賣股票時機含冷凍期
阿新 • • 發佈:2019-09-13
一、窮舉框架
思路一層for迴圈 dp[][]儲存每一個步驟的狀態,應該是兩層for迴圈的。
二、子問題公式
dp[i]與dp[i-1]與prices[i](當前的價格)之間的關係?這是要去思考的?
sell[i] = max ( sell[i-1] + profit, rest[i-2] + profit, 0 );
rest[i] = max ( sell[i-1], rest[i-1]);
三種狀態,但是有一種狀態沒有必要去考慮的
程式碼部分:
public class Solution {
public int maxProfit(int[] prices) {
if(prices.length < 2) return 0;
int n = prices.length, max;
int[] sell = new int[n];
int[] rest = new int[n];
sell[0] = 0;
sell[1] = Math.max(prices[1] - prices[0], 0);
for(int i = 2; i < sell.length; i++){
int profit = prices[i]-prices[i-1];
sell[i] = Math.max(Math.max( sell[i-1], rest[i-2] ) + profit, 0);
rest[i] = Math.max(sell[i-1], rest[i-1]);
}
return Math.max(sell[n-1], rest[n-1