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次没有持有的状态下找最大值

相关推荐
6Hzlia5 分钟前
【Classic 150 刷题计划】 LeetCode 205. 同构字符串 | C++ 双向绑定与哈希表映射
c++·算法·leetcode
有点。7 小时前
C++03阶段练习(练习题)
数据结构·算法·图论
GreenTea7 小时前
GrokBot 核心成员 Lauren Tan:每月交付 2000 个 PR 的人,是怎么用 AI 的
前端·后端·架构
码事漫谈7 小时前
FDE:一个缩写,两种命运
后端
周末也要写八哥8 小时前
经典算法实例:游戏中弱角色的数量(二)
算法
是Yu欸8 小时前
鸿蒙PC移植:2048 从网页小游戏到 AI 桌面应用
大数据·人工智能·算法·数据挖掘·openharmony·codex
名字还没想好☜8 小时前
Go context.AfterFunc 实战(Go 1.21):context 一取消就自动跑清理,告别手写 goroutine 监听 Done
后端·golang·go
鹿角片ljp8 小时前
KV Cache 解析
java·算法
liliangcsdn9 小时前
IVOL与偏度因子的对比测量分析
算法
明月_清风9 小时前
为什么最近开始关注 JEV?几个实战案例告诉你答案
人工智能·后端