首页 > 其他分享 >188. 买卖股票的最佳时机 IV(难)

188. 买卖股票的最佳时机 IV(难)

时间:2023-11-20 20:55:55浏览次数:31  
标签:持有 股票 IV 最佳时机 prices 188 股票价格 dp 利润

目录

题目

  • 给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。
    设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说,你最多可以买 k 次,卖 k 次。
    注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入:k = 2, prices = [2,4,1]
输出:2
解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。

示例 2:

输入:k = 2, prices = [3,2,6,5,0,3]
输出:7
解释:在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4 。
随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3 。

动态规划

class Solution:
    def maxProfit(self, k: int, prices: List[int]) -> int:
        n = len(prices)
        # 初始化动态规划数组
        dp = [[[0] *2 for _ in range(k+1)] for _ in range (n)]
        for i in range(1,n):
            for j in range(1,k+1):#k+1才取得到k值
                #base case
                dp[0][j][0] = 0   # 第一天不持有股票,利润为0
                dp[0][j][1] = -prices[0]   # 第一天持有股票,利润为-buy
                #状态转移
                dp[i][j][0]=max (dp[i-1][j][0],dp[i-1][j][1]+prices[i])# 不持有股票的情况,取前一天也不持有股票和前一天持有股票但今天卖出的最大利润
                dp[i][j][1]=max (dp[i-1][j][1],dp[i-1][j-1][0]-prices[i])# 持有股票的情况,取前一天也持有股票和前一天不持有股票但今天买入的最大利润,交易次数k减一
        return dp[n-1][k][0]  # 最后一天,进行了k次交易,不持有股票的利润即为最大利润

优化

  • 待更新...

标签:持有,股票,IV,最佳时机,prices,188,股票价格,dp,利润
From: https://www.cnblogs.com/lushuang55/p/17844835.html

相关文章

  • linux 安装keepalived
    1.下载安装包然后解压  1解压tar-zxvfkeepalived-2.2.2.tar.gzcd /opt/keepalived-2.2.2 ./configure--prefix=/usr/local/keepalived  有时候可能会报这个错误信息,此时只需要安装 libnl/libnl-3 依赖即可,输入 yum-yinstalllibnllibnl-deve***WARNIN......
  • 123. 买卖股票的最佳时机 III(难)
    目录题目动态规划题目给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入:prices=[3,3,5,0,0,3,1,4]输出:6......
  • Codeforces Round 785 (Div. 2)
    A-SubtleSubstringSubtraction/**__----~~~~~~~~~~~------___*..~~//====......__--~~~*-.\_|//|||\\~~......
  • 记录一次 maven 子模块相互依赖导致的父模块无法动态升级的问题 'parent.relativePath
        项目里面使用的commons公共模块,每次更改后之前都不会升级其版本号,导致当commons改动后,其他服务在不知道的情况下,会出现文件缺失。由于之前commons下面有12个公共子模块,所以之前一直没有升级commons模块。为了方便,于是决定每次更改commons模块后让所有的子项目都跟着升......
  • Codeforces Round 908 (Div. 2)
    Preface补一下之前期中考落下的CFyysy因为这学期又开始断电了,所以除了周五周六晚上的CF可能都不一定会去打,都会以后面补题为主A.SecretSport由于题目保证给出的状态合法,因此直接输出最后一个字符即可#include<cstdio>#include<iostream>#include<utility>#include<vect......
  • 新生代内存需要有两个Survivor区 S0、S1
     在我的上一篇博客中,介绍了JVM堆内存的结构以及在堆中进行的GC机制,链接是浅谈JAVAGC机制与性能优化那么,在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区?1为什么要有Survivor区先不去想为什么有两个Survivor区,第一个问题是,设置Survivor区的意义在哪里? 如果......
  • Liunx 安装keepalived
    1.官网下载 keepalived-2.2.2.tar.gz  移动到 /usr/soft/keepalived  然后进行解压     tar-zxvfkeepalived-2.2.2.tar.gz 2.配置   进入目录[root@localhostkeepalived]#cd/usr/soft/keepalived/keepalived-2.2.2[root@localhostkeepali......
  • Selenium4+python被单独定义<div>的动态输入框和二级下拉框要怎么定位?
    今天在做练习题的时候,发现几个问题捣鼓了好久,写下这篇来记录问题一:有层级的复选框无法定位到二级目录 对于这种拥有二级框的选项无法定位,也不是<select>属性.我们查看下HTML,发现它是被单独封装在body内拥有动态属性的独立<div>,当窗口点击的时候才会触发. 解......
  • 【略读论文|时序知识图谱补全】Adaptive Path-Memory Network for Temporal Knowledge
    会议:IJCAI,时间:2023,学校:1中国科学院计算机网络信息中心,北京2中国科学院大学,北京3澳门大学智慧城市物联网国家重点实验室,澳门4香港科技大学(广州),广州5佛罗里达大学计算机科学系,奥兰多摘要:提出一种新的具有TKG关联特征的体系结构建模方法,即自适应路径-记忆网络(DaeMon)。......
  • 【略读论文|时序知识图谱补全】Temporal Knowledge Graph Reasoning with Historical
    会议:AAAI,时间:2023,学校:上海交通大学摘要:大多数时序知识图谱的推理方法高度依赖于事件的递归或周期性,这给推断与缺乏历史交互的实体相关的未来事件带来了挑战。本文提出一种新的基于历史对比学习训练框架的对比事件网络(CENET)的新事件预测模型。1.CENET学习历史和非历史依赖来区......