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

一、题目分析

给定一个整数数组prices,其中第  prices[i] 表示第 i 天的股票价格 。​

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

  • 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

从题目中可以知道一个状态基:

309.最佳卖股票的时机包含冷冻期_第1张图片

示例分析 :

输入: prices = [1,2,3,0,2]
输出: 3 
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]

309.最佳卖股票的时机包含冷冻期_第2张图片

二、算法分析

1.状态表示:题目要求+经验

309.最佳卖股票的时机包含冷冻期_第3张图片

 2.根据状态基图填写状态转移方程

309.最佳卖股票的时机包含冷冻期_第4张图片

3.初始化

1.当在第0天的时候,买入dp[0][0]=-p[0];

2.当在第0天的时候,可交易dp[0][0]=0;//啥也不干

3.当在第0天的时候,冷冻期dp[0][0]=0;//买了又卖

 4.返回值

返回三种状态下的最大值,也可只返回最后两个

三、代码实现

public int maxProfit(int[] prices) {
        int len=prices.length;
        //创建dp表,三行,0-》买入状态下的最大值,1-》可交易状态下的最大值 2-》处于冷冻期的最大利润
        int[][] dp=new int[len+1][3];
        //初始化,当在第0天的状态下买入为-p【0】,可交易啥也不干,出入卖出买了又卖=0
        dp[0][0]=-prices[0];
        //填表
        for(int i=1;i

 

你可能感兴趣的:(动态规划,算法)