LeetCode-309-最佳买卖股票时机含冷冻期
思路
这是一道存在冷冻期的股票问题,因此无法连续买入卖出,存在三种状态,使用动态规划解决,依旧可以使用滚动数组,优化空间复杂度
初始化
int dp0=0;//手里没有股票,不处于冷冻期
int dp1=0;//手里没有股票,处于冷冻期
int dp2=-prices[0];//手里有股票
状态转移
int newdp0=Math.max(dp0,dp1);//昨天没股票处于或不处于冷冻期
int newdp1=dp2+prices[i];//昨天有股票今天卖出
int newdp2=Math.max(dp0-prices[i],dp2);//昨天没股票今天买或昨天有股票今天不卖
dp0=newdp0;
dp1=newdp1;
dp2=newdp2;
代码
class Solution {
public int maxProfit(int[] prices) {
if(prices.length<2)return 0;//只能买入
int dp0=0;//手里没有股票,不处于冷冻期
int dp1=0;//手里没有股票,处于冷冻期
int dp2=-prices[0];//手里有股票
for(int i=1;i<prices.length;i++){
int newdp0=Math.max(dp0,dp1);//昨天没股票处于或不处于冷冻期
int newdp1=dp2+prices[i];//昨天有股票今天卖出
int newdp2=Math.max(dp0-prices[i],dp2);//昨天没股票今天买或昨天有股票今天不卖
dp0=newdp0;
dp1=newdp1;
dp2=newdp2;
}
return Math.max(dp0,dp1);//返回最后一天的值,p2还有股票没有用,因此不并入计算
}
}