Leetcode 188.买卖股票的最佳时机4(718)

题目

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

Go 复制代码
func maxProfit(k int, prices []int) int {
   dp:=make([][]int,len(prices)+1)
   n:=k*2
   for i,_ := range dp{
    dp[i]=make([]int,n)
   }
   for k:=0;k<n;k++{
        if k%2==1{
            dp[0][k]=0
        }else{
            dp[0][k]=-prices[0]
        }
   }
   for i:=1;i<=len(prices);i++{
    for k:=0;k<n;k++{
        if k%2==0{
            if k==0{
                dp[i][k]=max(-prices[i-1],dp[i-1][k])
            }else{
                dp[i][k]=max(dp[i-1][k-1]-prices[i-1],dp[i-1][k])
            }
        }else{
            dp[i][k]=max(dp[i-1][k-1]+prices[i-1],dp[i-1][k])
        } 
        }
   }
   res:=0
     for i:=0;2*i<n;i++{
        res=max(res,dp[len(prices)][i*2+1])
     }
     return res
}

思路

上一道题,股票3是只能买两次,现在换成了只能买k次,其实还是具体的次数,但是换成了一个代数,所以我们要找的就是一个规律性一个总结的做法

那么其实在上一道题Leetcode 123.买卖股票3中,就发现奇数偶数的递推表达式是有一定规律的,当然要取决于状态的具体对应数字,这道题就用到了。当奇数时怎么样,偶数时递推公式又是怎么样的。

最后算结果时,是要在n次没有持有的状态下找最大值

相关推荐
蜗牛互联网18 分钟前
Java 17 HttpClient调用文件转写API的超时与失败回退
java·人工智能·后端
徐小黑ACG1 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
Navigator_Z2 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
北极有牛2 小时前
cpp学习笔记--常量指针
java·开发语言·算法
GPU实战笔记2 小时前
云端 GPU 训练的账户余额提醒:它能说明什么,不能说明什么?
深度学习·算法·成本管理·gpu云计算·云端训练
用户69371750013843 小时前
2026,程序员的时代拐点到了
android·前端·后端
浮链序3 小时前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm
小O的算法实验室3 小时前
IEEE TMC,面向异构物联网的多目标量子行为拓扑优化算法
算法
惜鸟3 小时前
从源码看 pi 的上下文管理:原始数据永久保留,模型视角按需裁剪
后端