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

本文详细介绍了如何使用动态规划解决LeetCode第309题——最佳买卖股票时机含冷冻期的问题。通过初始化状态、状态转移方程以及代码实现,阐述了在存在股票冷冻期的情况下,如何找到最大利润的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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还有股票没有用,因此不并入计算

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值