1. 程式人生 > >LeetCode 309. 最佳買賣股票時機含冷凍期

LeetCode 309. 最佳買賣股票時機含冷凍期

一、窮舉框架

思路一層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