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

相关推荐
gis开发之家13 分钟前
Spring Boot 4 深度解析,JdbcTemplate 实战——轻量级数据库操作方案
java·数据库·spring boot·后端
青 春 记 忆37 分钟前
LeetCode 283. 移动零|Python 解法详解
python·算法·leetcode
Hrain-AI1 小时前
企业 AI 治理运营怎么做:分级授权、Token 用量可观测与模型统一纳管
大数据·人工智能·算法
剑指offer.2 小时前
Linux多任务-线程篇
java·jvm·算法
2601_962063972 小时前
Spring Boot拦截器(Interceptor)详解
java·spring boot·后端
nike0good2 小时前
CF 126B(Password-z algorithm/exkmp)
开发语言·c++·算法
明月_清风2 小时前
GitHub Actions 从入门到实战:一文搞懂 CI/CD 自动化
后端·ci/cd·github
无定义_2 小时前
Bellman-Ford——贝尔曼福特算法
数据库·算法
foggyprojects3 小时前
AI 问数也要做行级权限:让 Codex 给销售查询加上权限
后端