求助|leetcode的123题:买卖股票的最佳时机 III
1999
2023.10.03
发布于 未知归属地

按照灵神的思路,下面代码哪里不对呀,通过不了。是初始值不对吗?求大佬帮忙!!!

func maxProfit(prices []int) int {
    length := len(prices)
    dp := make([][3][2]int, length) // 可以使用“滚动数组”的思想把dp数组压缩,降低空间复杂度

    // 初始值
    for i := 0; i < length; i++ {    
        dp[i][0][1] = math.MinInt
    }
    dp[0][1][1] = - prices[0]
    dp[0][2][1] = - prices[0]

    for i := 1; i < length; i++ {
        for j := 1; j <= 2; j++ {
            // 第i天最多完成j交易不持有股票的最大利润
            if dp[i-1][j][0] > dp[i-1][j-1][1] + prices[i] {
                dp[i][j][0] = dp[i-1][j][0]
            } else {
                dp[i][j][0] = dp[i-1][j-1][1] + prices[i]
            }
            // 第i天最多完成j交易持有股票的最大利润
            if dp[i-1][j][0] - prices[i] > dp[i-1][j][1] {
                dp[i][j][1] = dp[i-1][j][0] - prices[i]
            } else {
                dp[i][j][1] = dp[i-1][j][1]
            }
        }
    }
    return dp[length-1][2][0] // 不持有股票的利润大于持有股票的利润
}
评论 (15)