第43天| 123.买卖股票的最佳时机III、 188.买卖股票的最佳时机IV

news2024/9/29 1:16:25

1.题目链接:123. 买卖股票的最佳时机 III

题目描述:

                给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。

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

                注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

解法:

                ①定义dp数组,dp[i][0]表示未操作的时候的钱数,dp[i][1]表示第一次持有的钱数,dp[i][2]表示第一次不持有的钱数,dp[i][3]表示第二次持有的钱数,dp[i][4]表示第二次不持有的钱数。

                ②递推公式:

                        dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i])---即第一次持有 = max(前一天第一次持有,前一天没操作今天持有)

                        dp[i][2] = max(dp[i-1][2], dp[i-1][1] + prices[i])---即第一次不持有 = max(前一天第一次不持有,前一天第一次持有今天卖了)

                        dp[i][3] = max(dp[i-1][3], dp[i-1][2] - prices[i])---即第二次持有 = max(前一天第二次持有,前一天第一次不持有今天持有)

                        dp[i][4] = max(dp[i-1][4], dp[i-1][3] + prices[i])---即第二次不持有 = max(前一天第二次不持有,前一天第二次持有今天卖了)

                ③初始化:因为我们根据前一天求的当前的值,所以初始化dp[0][0~4],dp[1],dp[3] = -prices[0];dp[0],dp[2],dp[4] = 0;

                ④遍历顺序:因为根据前一天值求的,所以要从小到大遍历。

                ⑤最后返回最后一天最后一次不持有的状态的值 = 最大钱数。因为最后一次不持有肯定覆盖了前面不持有的钱数。

下面为代码(java): 

2.题目链接:188. 买卖股票的最佳时机 IV

题目描述:

                给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。

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

                注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

解法:

                ①此题和上题的不同就是将2抽象成了k。上一题中最多可以完成2笔交易,状态就有5个即从0~4,那么有k笔交易,状态就有2k+1个即从0~2k。

                ②故我们创建dp[prices.length][2k+1]

                ③递推公式:

                        不论是多少次交易我们每次都要求持有和不持有的状态,那么共要求2k+1个状态,我们就要有个循环来求状态 即j = 0开始,到哪结束呢?eg:2次最后的状态是4,我们要让j每两步两步的跳(即每一次都求出持有和不持有的状态),所以当j = 2k-1的时候正好能求出2k和2k+1的状态。所以j  < 2k,j+=2.

                        故递推公式:

                                for(int j = 0; j < 2k;j += 2){

                                        dp[i][j+1] = max(dp[i-1][j+1], dp[i-1][j] - prices[i]);---即买入 = max(前一天买入,前一天没操作当天买入)

                                        dp[i][j+2] = max(dp[i-1][j+2], dp[i-1][j+1] + prices[i])---即卖出 = max(前一天卖出,前一天买入当天卖出)

}

                ④初始化:

                        根据递推公式根据前一天的值求的,所以初始化dp[0][0~2k],因为只有买入的时候是-prices[i]。故初始化只有下标为奇数的时候为-prices[0],其余为0即可

                ⑤遍历顺序:

                        根据递推公式根据前一天的值求当前值,所以从前向后遍历。

                ⑥最后返回最后一天的最后一次卖出的状态即为求的最大利润。

下面为代码(java):

3.总结:

                ①第一题是股票可以买卖2次,可以列出5个状态分别是什么,当然也可以初始化具体5个状态。递推公式都是根据前一个的状态来求的。最后返回的是最后一天的最后一次不持有的状态。

                ②第二题就是将2抽象成了k,所以在求递推公式的时候,我们要每一次求出买和卖两个状态,然后用循环来做,每次跳两步即可。在初始化的时候同理要用循环来初始化,然后只有买入的状态初始化为-prices[0],其余的都为0.

                ③现在做了股票买卖系列的:只能买卖一次,可以买卖多次,至多买卖两次,至多买卖k次。 

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

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

相关文章

基于深度神经网络的3D模型合成【Transformer vs. CNN】

本文介绍用于3D模型合成的transformer网络与深度卷积网络。 推荐&#xff1a;使用 NSDT场景设计器 快速搭建 3D场景。 1、概述 从单一视角合成 3D 数据是一种基本的人类视觉功能&#xff0c;这对计算机视觉算法来说极具挑战性&#xff0c;这是一个共识。 但在 3D 传感器&#…

Fedora Linux未来五年规划

Fedora 委员会一直致力于起草战略计划&#xff0c;以帮助 Fedora Linux 更好地发展。近日 Fedora 委员会公布了一份 “《未来五年的 Fedora Linux 》” 战略计划草案&#xff0c;这份草案里面包含了他们的雄心壮志&#xff1a;每周将 Fedora 的活跃贡献者人数增加一倍。 Fedora…

如何获取docpelx求解目标函数后的数据;在解决目标优化问题之后,如何获取相关数据;获取决策变量的具体数值

获取优化问题的自变量取值和目标函数取值 说明通过 mdl.integer_var() 定义的决策变量&#xff0c;获取求解值决策变量获取目标函数取值获取具体代码&#xff1a;通过 mdl.continuous_var_list() 定义的决策变量&#xff0c;获取求解值具体代码说明 本次的代码环境是 python中…

【WEB安全】SQL注入挖掘

文章目录前言一、sql注入的分类注入漏洞存在位置二、漏洞挖掘Google语法疑似注入点手工挖掘批量挖取此类漏洞已知sql注入漏洞挖掘总结免责声明&#xff1a;前言 2021年OWASP发布漏洞威胁榜单&#xff0c;SQL注入从第一名下降到第三&#xff08;https://owasp.org/Top10/&#…

从0开始学python -34

Python3 输入和输出-2 读和写文件 open() 将会返回一个 file 对象&#xff0c;基本语法格式如下: open(filename, mode)filename&#xff1a;包含了你要访问的文件名称的字符串值。mode&#xff1a;决定了打开文件的模式&#xff1a;只读&#xff0c;写入&#xff0c;追加等。…

数据分析| Pandas200道练习题,使用Pandas连接MySQL数据库

文章目录使用Pandas连接数据库编码环境依赖包read_sql_query()的使用read_sql_table()的使用read_sql() 函数的使用to_sql()写入数据库的操作删除操作更新操作总结&#xff1a;使用Pandas连接数据库 通过pandas实现数据库的读&#xff0c;写操作时&#xff0c;首先需要进行数据…

kubernetes教程 -- k8s组件

k8s组件 maste节点 apiServer&#xff1a;资源操作的唯一入口&#xff0c;接受用户的输入&#xff0c;提供认证&#xff0c;控制访问等功能Scheduler&#xff1a;负责集群的资源调度&#xff0c;按照预定的调度策略将Pod调度到相应的node节点上controllerManager&#xff1a;负…

JVM学习篇剖析JVM类加载机制

1. 类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时&#xff0c;首先需要通过类加载器把主类加载到JVM。 public class Math {private static int initData 6666;public static User user new User();private int compute() {int a 1;int b 3;int c (…

【vue后台管理系统】基于Vue+Element-UI+ECharts开发通用管理后台(下)

文章目录面包屑导航制作效果展示思路分析代码实现过程需求优化用户管理页面效果展示新增用户表单实现table组件编写分页功能编写搜索功能编写附&#xff1a;ES6的解构赋值数组模型的解构&#xff08;Array&#xff09;对象模型的解构&#xff08;Object&#xff09;面包屑导航制…

[Linux篇] Linux常见命令和权限

文章目录使用XShell登录Linux1.Linux常用基本命令&#xff1a;1.1 ls&#xff08;列出当前的目录下都有哪些文件和目录&#xff09;1.2 cd (change directory 切换目录)1.3 pwd&#xff08;查看当前目录的绝对路径&#xff09;1.4 touch&#xff08;创建文件&#xff09;1.5 ca…

数据库系统是什么?它由哪几部分组成?

数据库系统&#xff08;Database System&#xff0c;DBS&#xff09;由硬件和软件共同构成。硬件主要用于存储数据库中的数据&#xff0c;包括计算机、存储设备等。软件部分主要包括数据库管理系统、支持数据库管理系统运行的操作系统&#xff0c;以及支持多种语言进行应用开发…

TestNG单元测试框架-常用注解介绍以及testng和Junit的区别【杭州多测师_王sir】【杭州多测师】...

一、TestNG单元测试框架-常用注解介绍 testng学习网址&#xff1a;https://www.jc2182.com/testng/testng-environment.html 1、Before类别和After类别注解按照如下循序执行BeforeSuite->BeforeTest->BeforeClass->{BeforeMethod->Test->AfterMethod}->After…

微信支付Native下单API接口正确调用姿势

商户Native支付下单接口&#xff0c;微信后台系统返回链接参数code_url&#xff0c;商户后台系统将code_url值生成二维码图片&#xff0c;用户使用微信客户端扫码后发起支付。 文档地址&#xff1a;微信支付-开发者文档 目录 一、Native下单接口简介 二、如何正确调通接口 (…

5. AOP

一、如何定义一个MethodHandler? 1.Controller注解修饰的类 1.注册成Spring Bean 2.表示它是一个SpringMVC下的Controller 2.在这个类下的方法中&#xff0c;只要被RequestMapping修饰&&方法的形参符合规定&#xff08;需要看文档&#xff09; 方法的返回值符合规定…

VK0256/B/C玩具、冷气机等段码液晶驱动芯片(IC)(32EGx8COM)技术资料选表

K PP 2543型号&#xff1a;VK0256/B/C封装形式&#xff1a;QFP64/LQFP64/LQFP52 VK0256/B/C是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大256点&#xff08;32EGx8COM&#xff09;的LCD屏。单片机可通过3/4线串行接口配置显示参数和发送显示数据&#xff0c;也可通过…

与ChatGpt聊天,学习golang标签的反射机制

与ChatGpt聊天&#xff0c;学习golang标签的反射机制引ChatGPT火了以后&#xff0c;本拐先是恐惧&#xff0c;之后是拥抱。最近很多编程知识的学习&#xff0c;都是通过 chatgpt来搞定。众所周知&#xff0c;本拐就是一个啥技术都半斤八两的程序员&#xff0c;这次&#xff0c;…

05服务发现:引入etcd服务注册中心

在分布式微服务架构中,服务注册发现组件(通常称为服务注册中心)往往有着举足轻重的作用,它的性能与稳定可能会直接影响到整个服务的状态,比如Spring Cloud中的Eureka、Dubbo中的Zookeeper等等,接下来我们就gRPC微服务中最常见的服务注册中心etcd,来讲述下两者在具体是怎…

Mr. Cappuccino的第41杯咖啡——Kubernetes之Pod调度策略

Kubernetes之Pod调度策略Pod的4种调度策略定向调度nodeNamenodeSelector亲和性调度node亲和性硬限制软限制关系运算符pod亲和性pod反亲和性污点和容忍污点&#xff08;taints&#xff09;容忍&#xff08;tolerations&#xff09;默认情况下&#xff0c;Scheduler计算出一个Pod…

conda 搭建tensorflow-GPU和pycharm以及VS2022 软件环境配置

conda 搭建tensorflow-GPU和pycharm以及VS2022 软件环境配置一、TensorFlow 环境配置安装1. Anaconda下载安装2.conda创建tensorflow环境二、pycharm以及VS2022 环境配置2.1 pycharm 软件安装以及环境配置2.2.1 pycharm 软件安装2.2.2 pycharm 软件conda环境配置2.2 Visual Stu…

注意!华为折叠屏手机的原厂膜不能自己撕!

对于用惯了直板手机的朋友来说&#xff0c;新机开箱撕膜是一件十分有“仪式感”的事情&#xff0c;但是对于折叠屏手机来说&#xff0c;这样的操作万万不可。华为折叠屏手机在使用的过程中也有着和传统智能手机不一样的注意事项&#xff0c;下面这几点大家在入手折叠屏手机之后…