最佳买卖股票问题

108 阅读1分钟
  • 这些问题一般用动态规划解决即可
  • 动态规划五步走
    • 定义dp数组和数组元素意义
    • 根据条件写好状态转移方程
    • 初始化dp数组
    • 决定遍历顺序
    • 代入元素看看是否有反例

309. 最佳买卖股票时机含冷冻期

  • 该题的“冷冻期”是陷进,思考时不要陷入这个冷冻期中去
  • 定义好了状态,再根据题意并结合五步走即可解题
    • dp[i][0]:该天不持有股票的最大利润
    • dp[i][1]:该天持有股票的最大利润
    • dp[i][2]:该天卖出股票的最大利润
class Solution {
    public int maxProfit(int[] prices) {
        int len=prices.length;
        int[][] dp=new int[len][3];
        if(len==1)
            return 0;
        //初始化
        dp[0][1]=-prices[0];
        //遍历
        for(int i=1;i<len;i++){
            dp[i][0]=Math.max(dp[i-1][0],dp[i-1][2]);
            dp[i][1]=Math.max(dp[i-1][0]-prices[i],dp[i-1][1]);
            dp[i][2]=dp[i-1][1]+prices[i];
        }
        return Math.max(dp[len-1][0],dp[len-1][2]);
    }
}