代码随想录打卡第五十二天|123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

news2024/10/5 8:07:11

123.买卖股票的最佳时机III

题目:
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)
在这里插入图片描述
在这里插入图片描述

题目链接: 123.买卖股票的最佳时机III
注:不同状态转换的关系
持有第一支股票:之前不持有,现买入第一支股票;一直持有
不持有第一支股票:之前不持有(没买入 没进行操作);之前持有,现卖出
持有第二支股票:再卖出第一支股票之后,一直未操作,现买入第二支股票;一直持有
不持有第二支股票:之前不持有(没买入 没进行操作);之前持有,现卖出
注意第一次股票买卖和第二次的关联关系

class Solution {
    //设四个变量
    //dp[n][0] 持有第一支股票
    //dp[n][1] 不持有第一只股票
    //dp[n][2] 持有第二支股票 它的前一个状态是不持有第一支股票 因为只有卖掉第一支才能买第二支
    //dp[n][3] 不持有第二只股票
    public int maxProfit(int[] prices) {
        int n=prices.length;
        int[][] dp=new int[n+1][4];
        //初始化
        dp[1][0]=-prices[0];
        dp[1][1]=0;
        dp[1][2]=-prices[0];
        dp[1][3]=0;
        for(int i=2;i<=n;i++){
            //第一次买入 本金是0
            dp[i][0]=Math.max(dp[i-1][0],-prices[i-1]);
            dp[i][1]=Math.max(dp[i-1][1],dp[i-1][0]+prices[i-1]);
            dp[i][2]=Math.max(dp[i-1][2],dp[i-1][1]-prices[i-1]);
            dp[i][3]=Math.max(dp[i-1][3],dp[i-1][2]+prices[i-1]);
        }
        return Math.max(Math.max(dp[n][0],dp[n][2]),Math.max(dp[n][1],dp[n][3]));
    }
}

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

题目:
给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说,你最多可以买 k 次,卖 k 次。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
在这里插入图片描述
在这里插入图片描述
题目链接: 188.买卖股票的最佳时机IV
把上一次的两次改成多次即可

class Solution {
    public int maxProfit(int k, int[] prices) {
        int n=prices.length;
        int[][] dp=new int[n+1][2*k];
        //初始化
        for(int j=0;j<k*2;j++){
            if(j%2==0){
                dp[1][j]=-prices[0];
            }else{
                dp[1][j]=0;
            }
        }
        for(int i=2;i<=n;i++){
            //第一次买入 本金是0
            dp[i][0]=Math.max(dp[i-1][0],-prices[i-1]);
            dp[i][1]=Math.max(dp[i-1][1],dp[i-1][0]+prices[i-1]);
            for(int j=2;j<k*2;j++){
                if(j%2==0){
                    dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-1]-prices[i-1]);
                }else{
                    dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-1]+prices[i-1]);
                }
            }
        }
        int max=Integer.MIN_VALUE;
        for(int j=0;j<k*2;j++){
            if(dp[n][j]>max){
                max=dp[n][j];
            }
        }
        return max;
    }
}

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

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

相关文章

iPhone无法连接电脑?怎么回事?解决方法来了!

苹果用户将手机和电脑连接后&#xff0c;可以轻松实现两者之间的数据传输。但是&#xff0c;在连接设备的过程中可能会出现没有任何反应的情况。这是怎么回事&#xff1f;本文将为大家介绍解决iPhone无法连接电脑的常见方法。如果您的iphone无法连接电脑&#xff0c;请尝试以下…

导入Embassy库进行爬虫

Embassy是一个基于Lua的轻量级爬虫框架&#xff0c;可以方便地进行网页抓取和数据提取。它提供了简单易用的接口和丰富的功能&#xff0c;可以帮助开发者快速构建爬虫应用。 要使用Embassy进行爬虫&#xff0c;首先需要安装Embassy库。可以通过Lua的包管理工具luarocks来安装E…

如何用MFI确定波浪理论第一浪,anzo capital实操演示

通过上文投资者学会了如何确定波浪理论第一浪&#xff0c;但在后台有投资者咨询 &#xff1a;如何用MFI确定波浪理论第一浪&#xff0c;anzo capital昂首资本秉承着有求必应的态度&#xff0c;今天实操进行演示。 在图中&#xff0c;发散用蓝色标注&#xff0c;收敛用绿色。价…

深入理解Linux网络笔记(四):内核是如何发送网络包的

本文为《深入理解Linux网络》学习笔记&#xff0c;使用的Linux源码版本是3.10&#xff0c;网卡驱动默认采用的都是Intel的igb网卡驱动 Linux源码在线阅读&#xff1a;https://elixir.bootlin.com/linux/v3.10/source 3、内核是如何发送网络包的 1&#xff09;、网络包发送过程…

聚观早报 |2024款飞凡R7官宣;小米14新配色材质

【聚观365】10月27日消息 2024款飞凡R7官宣 小米14新配色材质 金山办公2023第三季度业绩 IBM2023第三季度业绩 新东方2024财年第一季度业绩 2024款飞凡R7官宣 飞凡汽车官宣&#xff0c;2024款飞凡R7将于11月上市&#xff0c;新车将搭载飞凡巴赫座舱&#xff0c;同时超过1…

LabVIEW应用开发——基本函数(一)

前面我们介绍了一些控件的介绍和属性的配置&#xff0c;想要完成一个软件只会拖控件肯定是不行的&#xff0c;没办法实现既有的功能。比如我们要实现从串口中读到数据&#xff0c;根据一定的协议解析&#xff0c;然后转换成各个参数的值的显示&#xff0c;包括时间、电压、电流…

Simulink中如何使用数组以及创建数组、对数组索引、赋值

一、总体概述 1、数组的创建&#xff1a;Mux/constant 2、数组的切片&#xff1a;Demux 3、数组的索引&#xff1a;Selector 4、数组的赋值&#xff1a;Assignment 5、数组的运算&#xff1a;数组可只直接使用运算模块、点乘、矩阵运算 二、详细步骤 1、数组的创建 &am…

【Docker】Linux网络命名空间

命名空间 Namespace是Linux提供的一种对于系统全局资源的隔离机制&#xff1b;从进程的视角来看&#xff0c;同一个namespace中的进程看到的是该namespace自己独立的一份全局资源&#xff0c;这些资源的变化只在本namespace中可见&#xff0c;对其他namespace没有影响。容器就…

stm32的ADC采样率如何通过Time定时器进行控制

ADC采样率是个跟重要的概念. 手册上说可以通过Timer定时器进行触发ADC采样. 可我这边悲剧的是, 无论怎么样. ADC都会进行采样. 而且就算是TIM停掉也是一样会进行采样. 这就让我摸不着头脑了… 我想通过定时器动态更改ADC的采样频率. 结果不随我愿… 这到底是什么问题呢? 一…

STM32 pack STM32F系列开发包下载/stm32 Cube Keil V5 开发pack突然丢失

文章目录 1.做STM32开发时,经常发现下载的DEMO代码无法打开,ST自带的更新库软件根本连不上服务器,每次到此都非常恼火。即使进入到官方下载,但每次下载时间超级长都是几小时级别的,如果上面的链接满足不了,那就花几个积分,去下边的链接下载吧。1.各种安装包下载链接下载…

Q41F-40C手动球阀型号解析

Q41F-40C型号字母含义解析 Q41F-40C是德特森阀门常用的手动球阀型号字母分别代表的意思是: Q——代表阀门类型《球阀》 4——代表连接方式《法兰》 1——代表结构形式《浮动式》 F——代表阀座材料《聚四氟乙烯》 -《分隔键》 40——代表公称压力《4.0MPA》 C——代表阀…

红队专题-Web渗透之资产情报信息收集能力(社工)总结

信息收集 思路框架知识整理 招募六边形战士队员主动信息收集-直接访问[工具]打点收集内容服务器系统版本、域名域名信息收集工具 dnsenumtheHarvesterLayer子域名收集 DiscoverSubdomain子域名信息搜集工具 wydomain目标域名、DNS收集 subDomainsBrute 端口同服旁站/服务/bann…

分享!10个使用Angular CLI的实战应用技巧

如果您正在使用Angular&#xff0c;就知道Angular CLI有多有用。它简化了创建和管理Angular项目的过程&#xff0c;凭借其直观的命令行界面&#xff0c;它可以轻松处理复杂的任务&#xff0c;如生成组件、服务、管道、指令等。 但是您知道如何有效地使用Angular CLI吗&#xf…

git stash的使用方法

git stash的使用方法 应用场景 当我们在开发一个新功能的时候&#xff0c;或者开发到一半&#xff0c;然后就收到了线上master 出现了bug&#xff0c;当分支开发已经进行了或者进行到一半了&#xff0c;这时怎么办呢&#xff1f; 这时解决方案有两种&#xff1a;一种是先先将当…

JVisualVM工具的使用

本文来说下JVisualVM工具的基本使用 文章目录 内存泄漏和内存溢出分析工具JVisualVM工具使用本文小结 内存泄漏和内存溢出 简单地说&#xff0c;内存泄漏&#xff08;Memory leak&#xff09;就是在内存中有很多对象没有被回收&#xff0c;一直占着内存&#xff1b;而内存溢出就…

【Docker】Linux网桥连接多个命名空间

veth实现了点对点的虚拟连接&#xff0c;可以通过veth连接两个namespace&#xff0c;如果我们需要将3个或者多个namespace接入同一个二层网络时&#xff0c;就不能只使用veth了。 在物理网络中&#xff0c;如果需要连接多个主机&#xff0c;我们会使用bridge&#xff08;网桥&…

代码随想录算法训练营第三十四天丨 贪心算法part05

435. 无重叠区间 思路 为了让区间尽可能的重叠&#xff0c;我按照左边界排序&#xff0c;从左向右记录重叠区间的个数。最后直接返回记录的重叠区间的个数就行了。 本题其实和昨天做的 ‘用最少数量的箭引爆气球’ 的思路整体是一样的&#xff0c;忘记思路可用看昨天的题目笔…

JavaScript 中 BOM 基础知识有哪些?

浏览器对象模型&#xff08;Browser Object Model&#xff0c;简称 BOM&#xff09;是 JavaScript 的组成部分之一&#xff0c;BOM 赋予了 JavaScript 程序与浏览器交互的能力。 window 对象是 BOM 的核心&#xff0c;用来表示当前浏览器窗口&#xff0c;其中提供了一系列用来…

创新领航 | 竹云参编《基于区块链的数据资产评估实施指南》正式发布!

10月25日&#xff0c;由深圳数宝数据服务股份有限公司和深圳职业技术大学提出&#xff0c;中国科学院深圳先进技术研究院、中国电子技术标准化研究院、中国&#xff08;天津&#xff09;自由贸易试验区政策与产业创新发展局、网络空间治理与数字经济法治&#xff08;长三角&…

称球问题之十二个球有一个次品不知轻重三次称出

使用穷举法来解&#xff1a; 12个球分A1234、B1234、C1234 1、A1234B1234→坏在C1234 1.1、A123C123→坏在C4 1.2、A123<C123→坏在C123&#xff0c;且知坏的重 1.2.1、C1C2→坏在C3 1.2.2、C1<C2→坏在C2 1.2.3、C1>C2→坏在C1 1.3、A123>C123→坏在C123&…