代码随想录算法训练营第五十二天|188.买卖股票的最佳时机Ⅳ

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

代码随想录

. - 力扣(LeetCode)

 这道题目与之前题目不同的是:限制了k笔交易

设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。

确定dp数组以及下标的含义

每多交易一次就会多两个状态,上一题中可以完成2笔交易,就有1+2*2个状态,那么完成k笔交易,就有1+2*k个状态

dp数组的大小:len(prices)* (2*k+1)

使用二维数组 dp[i][j] :第i天的状态为j,所剩下的最大现金是dp[i][j]

j的状态表示为:

  • 0 表示不操作
  • 1 第一次买入
  • 2 第一次卖出
  • 3 第二次买入
  • 4 第二次卖出
  • 5 第三次买入
  • 6 第三次买出

大家应该发现规律了吧 ,除了0以外,偶数就是卖出,奇数就是买入

题目要求是至多有K笔交易,那么j的范围就定义为 2 * k + 1 就可以了。

确定递推公式

达到dp[i][1]状态,有两个具体操作:

  • 操作一:第i天买入股票了,那么dp[i][1] = dp[i - 1][0] - prices[i]
  • 操作二:第i天没有操作,而是沿用前一天买入的状态,即:dp[i][1] = dp[i - 1][1]

选最大的,所以 dp[i][1] = max(dp[i - 1][0] - prices[i], dp[i - 1][1]);

同理dp[i][2]也有两个操作:

  • 操作一:第i天卖出股票了,那么dp[i][2] = dp[i - 1][1] + prices[i]
  • 操作二:第i天没有操作,沿用前一天卖出股票的状态,即:dp[i][2] = dp[i - 1][2]

所以dp[i][2] = max(dp[i - 1][1] + prices[i], dp[i - 1][2])

同理可以类比剩下的状态,代码如下:

本题和动态规划:123.买卖股票的最佳时机III (opens new window)最大的区别就是这里要类比j为奇数是买,偶数是卖的状态

要注意状态之间的顺序性

比如第2次持有状态,是依赖于之前天就是第二次持有,或者是当前第二次买入,那么前一天就是第一次不持有的状态;如果是第二次不持有,当天卖出的话,那么前一天就是第一次持有

class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:dp = [[0 for _ in range(2*k + 1)] for i in range(len(prices))]#dp[i][0] 不操作,dp[i][1]:第一次持有 ,dp[i][2]:第一次不持有 ,dp[i][3]:第二次持有 ,dp[i][4]: 第二次不持有for j in range(0,2*k,2):dp[0][j+1] =  -prices[0]for i in range(1,len(prices)):for j in range(0,2*k,2):dp[i][j+1] = max(dp[i-1][j+1],dp[i-1][j]-prices[i]) #第j次持有dp[i][j+2] = max(dp[i-1][j+2],dp[i-1][j+1]+prices[i])#第j次不持有return dp[-1][-1] #这个结果包含了第一次买卖的最大值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity】官方文档学习-光照系统

目录 1 前言 2 光照介绍 2.1 直接光与间接光 2.2 实时光照与烘焙光照 2.3 全局光照 3 光源 3.1 Directional Light 3.1.1 Color 3.1.2 Mode 3.1.3 Intensity 3.1.4 Indirect Multiplier 3.1.5 Shadow Type 3.1.6 Baked Shadow Angle 3.1.7 Realtime Shadows 3.1…

数据挖掘--分类

数据挖掘--引论 数据挖掘--认识数据 数据挖掘--数据预处理 数据挖掘--数据仓库与联机分析处理 数据挖掘--挖掘频繁模式、关联和相关性:基本概念和方法 数据挖掘--分类 数据挖掘--聚类分析:基本概念和方法 基本概念 决策树归纳 决策树:决策树是一…

C#面:请解释web.config⽂件中的重要节点

在C#中&#xff0c;web.config文件是一个XML格式的配置文件&#xff0c;用于配置ASP.NET应用程序的各种设置。web.config文件中包含了许多重要的节点&#xff0c;下面是一些常见的重要节点及其作用&#xff1a; <configuration>节点&#xff1a;web.config文件的根节点&…

如何提高网站访问量?

提高网站访问量通常需要一个多方面的策略&#xff0c;涉及SEO、内容营销、社交媒体和其他网络营销手段&#xff0c;而我们仅从seo入手来说说 关键词优化是SEO的核心&#xff0c;它确保网站能够针对潜在用户的搜索查询进行优化。这不仅涉及在网站内容中使用正确的关键词 还需要…

Python量化交易学习——Part6:多因子选股策略实战(2)

本节主要是针对上节讲解的进行回测: 策略: 首先根据上节所选的因子进行选股,各个因子的权重都设置为1,之后对加权后的因子进行排序,选择因子权重值大的5只股票,进行买入,每个月执行一次上述策略,看最终收益率情况如何。 首先先编写函数代码,新建一个py文件,我们这里…

问题:前肢的前方称() #微信#经验分享#微信

问题&#xff1a;前肢的前方称&#xff08;&#xff09; A . 掌侧 B . 跖侧 C . 背侧 D . 胫侧 E . 桡侧 参考答案如图所示

TOGAF数字化转型的关键(文尾附在线TOGAF免费测试)

业务架构驱动数据架构和应用架构的设计&#xff0c;而应用架构又依赖于数据架构和技术架构的支持。技术架构则为整个架构提供了稳定的基础设施。 在数字化转型中&#xff0c;协调和整合这四种架构是至关重要的。通过确保它们之间的一致性和协同工作&#xff0c;可以实现企业业务…

【CSS】clip-path 属性详解

目录 基本语法值几何形状SVG 引用URL 引用 示例结合动画 clip-path 属性用于在 SVG 和 HTML 中创建复杂的裁剪区域&#xff08;即剪切路径&#xff09;&#xff0c;从而只显示元素的一部分。 基本语法 selector {clip-path: value; }值 clip-path 属性接受以下类型的值&#…

【工具】Redis的安装使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Redis简介二、Redis的安装使用三、本文总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 随着开发语言及人工智能工具的普及&am…

Unity学习要点

前言 学习Unity作为游戏开发的强大工具&#xff0c;对于初学者来说&#xff0c;掌握一些基础而实用的技巧是非常重要的。这不仅能帮助你更快地上手&#xff0c;还能在项目开发过程中提高效率。以下是一些Unity初学者的使用技巧&#xff0c;希望能为你的学习之旅提供帮助。 ##…

极简主义在UI设计中的应用及解析

极简主义&#xff0c;即“少就是多”。在设计中&#xff0c;极简主义是许多艺术概念之一&#xff0c;它描述了一种内容形式&#xff0c;可以在许多方面使用。现在移动UI界面和网页设计中的极简主义设计越来越多。即时设计认为&#xff0c;极简主义UI界面不仅美观&#xff0c;而…

HTTP/HTTPS Testing Magic Tool GO-VCR

目录 What is go-vcr ?Why Use go-vcr?How Does go-vcr Work?How Integrate into your TestingConclusion When developing applications that rely on external APIs, testing can become a challenge. You want your tests to be reliable, fast, and not dependent on th…

[经验] 昆山教育网(昆山教育网中小学报名) #媒体#职场发展#微信

昆山教育网&#xff08;昆山教育网中小学报名&#xff09; 昆山教育局网站 网站&#xff1a;昆山市教育局 昆山市教育局全面贯彻执行党和国家的教育方针、政策&#xff0c;落实有关教育工作的法律、法规&#xff1b;负责制定本市教育工作的实施意见和措施&#xff0c;并监督…

TriForce: 突破长序列生成瓶颈的分层投机解码技术

在人工智能领域&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的长序列生成能力一直是研究的热点。然而&#xff0c;随着模型规模的增长&#xff0c;推理过程中的内存和计算瓶颈成为了限制其应用的主要障碍。为了解决这一问题&#xff0c;Carnegie Mellon University和…

1867java银证转账系统系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java银证转账系统系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&a…

骑砍2霸主MOD开发(11)-瓦兰迪亚火骑兵

一.火焰灼烧Timer public class FlameCavalryTimer_1 : PLCommonBasicMissionTimer{private Mission _mission;public FlameCavalryTimer_1(Mission mission, float triggerInterval, bool isTriggerOnce) : base(triggerInterval, isTriggerOnce){_mission mission;}public o…

go语言后端开发学习(一)——JWT的介绍以及基于JWT实现登录验证

什么是JWT JWT,全名为JSON Web Token&#xff0c;是当下主流的一种服务端通信认证方式&#xff0c;具有轻量,无状态的特点&#xff0c;它实现了让我们在用户与服务器之间传递安全可靠的Json文本信息&#xff0c;它的使用过程主要是这样的&#xff1a; 当用户注册的时候&#x…

【百万字详解Redis】集群

文章目录 一、集群模式概述1.1、什么是集群模式1.2、集群模式特点1.3、集群工作方式 二、集群模式的搭建2.1、搭建前的准备2.2、修改集群配置2.3、启动redis服务2.4、创建集群2.5、查看redis服务状态2.6、进入一个节点2.7、测试操作 三、集群操作3.1、主从切换3.2、从节点操作3…

【Python】解决Python报错:ValueError: not enough values to unpack (expected 2, got 1)

​​​​ 文章目录 引言1. 错误详解2. 常见的出错场景2.1 函数返回值解包2.2 遍历含有不同长度元组的列表 3. 解决方案3.1 检查和调整返回值3.2 安全的解包操作 4. 预防措施4.1 使用异常处理4.2 单元测试 结语 引言 在Python编程中&#xff0c;ValueError 是一个常见的异常类…

2024年如何通过完善的工程化,从0到1手把手建立个人 react 组件库

本文聚焦于快速创建并部署个人的组件库&#xff0c;方便平时开发中将通用的组件抽出&#xff0c;也可用于简历上展示个人的组件成果~ 组件库体验地址&#xff1a;components-library 关于以上内容&#xff0c;你是否好奇如何实现的&#xff0c;对于大多数项目&#xff0c;诸如…