Leetcode 309.买卖股票的最佳时期含冷冻期(你也想成为股票高手吗o〃ω〃o,718)

题目

26年7月18日(首刷自解)

Go 复制代码
func maxProfit(prices []int) int {
    //dp数组含义.dp[i][j]表示在第i天,状态为j时的最多钱
    dp:=make([][]int,len(prices)+1)
    for i,_ :=range dp{
        dp[i]=make([]int,3)
    }
    dp[0][0]=0
    dp[0][1]=-prices[0]
    dp[0][2]=0
    dp[1][0]=0
    dp[1][1]=-prices[0]
    dp[1][2]=0
    for i:=2;i<=len(prices);i++{
        dp[i][0]=maxplus(dp[i-1][1]+prices[i-1],dp[i-1][0],dp[i-1][2])
        dp[i][1]=max(dp[i-2][0]-prices[i-1],dp[i-1][1])
        dp[i][2]=dp[i-1][0]
    }
    return max(dp[len(prices)][0],dp[len(prices)][2])
}
func maxplus(a,b,c int) int{
    res1:=0
    if a>=b{
        res1=a
    }else{
        res1=b
    }
    if res1>=c{
        return res1
    }else{
        return c
    }
}

思路

这道题和上一道题都是自己做出来的,属于举一反三了,这道题现在给你一个冷冻期(术士熔断),卖股票后要等一天(开领域),其实能想到,无非多了一种状态,所以一共有三种状态,持有,没持有,冷冻期

这里我最开始的错误代码是这样的

Go 复制代码
func maxProfit(prices []int) int {
    //dp数组含义.dp[i][j]表示在第i天,状态为j时的最多钱
    dp:=make([][]int,len(prices)+1)
    for i,_ :=range dp{
        dp[i]=make([]int,3)
    }
    dp[0][0]=0
    dp[0][1]=-prices[0]
    dp[0][2]=0
    dp[1][0]=0
    dp[1][1]=-prices[0]
    dp[1][2]=0
    for i:=2;i<=len(prices);i++{
        dp[i][0]=maxplus(dp[i-1][1]+prices[i-1],dp[i-1][0],dp[i-1][2])
        dp[i][1]=max(dp[i-1][0]-prices[i-1],dp[i-1][1])
        dp[i][2]=dp[i-1][0]
    }
    return max(dp[len(prices)][0],dp[len(prices)][2])
}
func maxplus(a,b,c int) int{
    res1:=0
    if a>=b{
        res1=a
    }else{
        res1=b
    }
    if res1>=c{
        return res1
    }else{
        return c
    }

在我手动模拟后发现问题

可以看到我dp41其实是出问题了,看看dp41如果算出来等于2,意味着第一天买入,第三天卖出,而我第四天是持有状态,说明我第四天又买入了,但是熔断期还没过怎么可能买?

所以递推公式dpi1其实应该为max(dp[i-2][0]-prices[i-1],dp[i-1][1]),是dpi-20

其实也好理解,如果你今天持有的状态是因为今天买入而不是之前就持有,说明你在之前某个点是卖出了股票的,这个点不可能是昨天,因为如果是昨天那么今天会是熔断期,所以最早也得是前天,

注意相应的初始化,也要改,i=0和i=1都需要初始化,然后循环从i=2开始

相关推荐
To_OC8 小时前
从一头雾水到跑通全流程:我用一个周末啃透了JWT登录鉴权
前端·后端·http
前端兰博9 小时前
05-Redis
redis·后端
databook9 小时前
从手动检查到自动监控:一个数据质量工作流的实现
后端·python·数据分析
【JAVA】玩家9 小时前
Spring核心原理全解析:从零到生产实战
java·后端·spring
东风破_10 小时前
从 Neo4j 到 GraphRAG:用 Text-to-Cypher 构建图检索 RAG
人工智能·后端
llqbzllll11 小时前
Spring AI 工具调用不是反射一下就结束:用 2.0.1 跑通失败恢复与调用上限
人工智能·后端
狼爷12 小时前
Rust/Go/Java/Python/PHP 大比拼:负载下后端框架到底差多少?
java·后端·编程语言
mantou13213 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端
程序员老赵13 小时前
Docker 部署 DeepSeek Harness:轻松搭建局域网里的 AI Agent 平台
后端·ai编程·deepseek
YIAN13 小时前
实战|用 DeepSeek + SQLite 从零搭建轻量 Text2SQL 查询助手
后端·sqlite·deepseek