java算法day50 | ● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

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

在这里插入图片描述
在这里插入图片描述

思路: 这道题的关键就是如何设置dp数组的状态。用五种状态表示对股票持有或售出的不同阶段。代码随想录讲解视频

class Solution {
    public int maxProfit(int[] prices) {
        int[][] dp=new int[prices.length][5];
        dp[0][0]=0;
        dp[0][1]=-prices[0];
        dp[0][2]=0;
        dp[0][3]=-prices[0];
        dp[0][4]=0;
        for(int i=1;i<prices.length;i++){
            dp[i][1]=Math.max(dp[i-1][1],dp[i-1][0]-prices[i]);
            dp[i][2]=Math.max(dp[i-1][2],dp[i-1][1]+prices[i]);
            dp[i][3]=Math.max(dp[i-1][3],dp[i-1][2]-prices[i]);
            dp[i][4]=Math.max(dp[i-1][4],dp[i-1][3]+prices[i]);
        }
        return dp[prices.length-1][4];   
    }
}

时间复杂度:O(n)
空间复杂度:O(n × 5)

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

在这里插入图片描述
在这里插入图片描述

思路: 在上一题2次的基础上变为k次。可以发现规律:除了0以外,偶数就是卖出,奇数就是买入。
因此dp数组的维度为[n][k*2+1]

class Solution {
    public int maxProfit(int k, int[] prices) {
        int[][] dp=new int[prices.length][k*2+1];
        for(int i=0;i<k*2+1;i++){
            if(i%2==0){
                dp[0][i]=0;
            }else{
                dp[0][i]=-prices[0];
            }  
        }

        for(int i=1;i<prices.length;i++){
            for(int j=1;j<k*2+1;j++){
                if(j%2==0){
                    dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-1]+prices[i]);
                }else{
                    dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-1]-prices[i]);
                }
            }
        }
        return dp[prices.length-1][k*2];
    }
}

时间复杂度:O(nk)
空间复杂度:O(n
k)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

成功解决> 错误: 无效的源发行版:17

运行项目的时候出现下面的报错&#xff1a; Execution failed for task ‘:device_info_plus:compileDebugJavaWithJavac’. 错误: 无效的源发行版&#xff1a;17 原因&#xff1a;没有设置好自己项目的JDK版本 解决&#xff1a;1.检查自己项目的JDK版本 将自己的项目改为JDK 1…

09 Php学习:数组和排序

数组概念 在PHP中&#xff0c;数组是一种复合数据类型&#xff0c;用于存储多个值。以下是关于PHP数组的详细解释&#xff1a; 索引数组&#xff1a;索引数组是最基本的数组类型&#xff0c;其中每个元素都有一个唯一的数字索引&#xff0c;从0开始递增。 关联数组&#xff…

总结C/C++中程序内存区域划分

C/C程序内存分配的几个区域&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中&#xff0c;效率很⾼…

电脑无法开机?原因分析与解决方案

电脑无法开机是一种常见的问题&#xff0c;可能会给用户带来诸多困扰。无法启动可能是由于硬件故障、软件问题或者其他未知原因引起的。在本文中&#xff0c;我们将介绍三种常见的方法来解决电脑无法开机的问题&#xff0c;以帮助用户尽快恢复正常使用。 方法1&#xff1a;检查…

c语言例题,计算1/1-1/2+1/3-1/4+1/5……+1/99-1/100的值,打印结果

例题&#xff1a;计算分式1/1-1/21/3-1/41/5……1/99-1/100的值&#xff0c;打印结果 根据题目&#xff0c;我们知道需要计算的是一个固定值&#xff0c; 先定义三个变量来当作分式里的三个值&#xff0c;变量i当作分式里的分母部分&#xff0c;通过for循环来实现分母每次循环…

vue3基础知识

网站 168张图&#xff0c;万字长文&#xff0c;手把手教你开发vue后台管理系统&#xff01;-腾讯云开发者社区-腾讯云 Overview 组件总览 | Element Plus Vue.js - 渐进式 JavaScript 框架 | Vue.js 安装 Node.js 下载直接安装&#xff0c;自动包含 npm。 Node.js — Run…

【讲解下目标追踪】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【OpenVINO™】使用 OpenVINO™ C# API 部署 YOLOv9 目标检测和实例分割模型(下篇)

3.2 定义模型预测方法 使用 OpenVINO™ C# API 部署模型主要包括以下几个步骤&#xff1a; 初始化 OpenVINO Runtime Core读取本地模型&#xff08;将图片数据预处理方式编译到模型&#xff09;将模型编译到指定设备创建推理通道处理图像输入数据设置推理输入数据模型推理获取…

Java异常处理机制详解:多层方法调用与异常传播(day23)

1.数组下标越界 2.多个处理异常 上面这两个代码的区别就是有无 System.out.println("抛出了NumberFormatException"); System.out.println("抛出了ArrayIndexOutOfBoundsException"); 第一种是不论捕获到哪种异常&#xff0c;都只会调用e.printStack…

利用AI开源引擎:实现在消费者投诉处理中的智能分析|可本地化部署

随着消费者投诉渠道逐渐多样化&#xff0c;电话、网络等途径使得消费者的声音能够更加迅速地被职能部门所接收。然而&#xff0c;大量的投诉信息也给职能部门带来了巨大的处理压力。如何高效地从消费者投诉中抽取关键信息&#xff0c;并对这些信息进行分类和统计&#xff0c;成…

【主题广泛|稳定检索】2024年艺术与文化交流国际会议 (ICACE 2024)

2024年艺术与文化交流国际会议 (ICACE 2024) 2024 International Conference on Art and Cultural Exchange 【会议简介】 2024年艺术与文化交流国际会议即将在魅力四溢的山城重庆隆重召开。本次会议旨在汇聚全球艺术与文化领域的专家学者&#xff0c;共同探讨艺术与文化交流…

git 学习 2

在vscode上使用git&#xff0c;下载git-graph 图形化操作 不同的分支&#xff0c;被激活的时候叫checkout。在vscode上生成新分支会默认checkout新分支。可以在终端用 git checkout main回到主分支&#xff0c;用git switch命令更好 你在main上提交了修改&#xff0c;切回dev…

lua学习笔记19(面相对象学习的一点总结)

print("*****************************面相对象总结*******************************") object{} --实例化方法 function object:new()local obj{}self.__indexselfsetmetatable(obj,self)return obj end-------------------------如何new一个对象 function object:…

51单片机 DS1302

DS1302 实现流程 将提供的ds1302底层参考程序拷贝到工程下 注意在ds1302.c中可能硬件引脚没有定义&#xff0c;注意去看一下。还有头文件什么的在ds1302中记得加上 参考代码&#xff1a; #include "reg52.h" #include "ds1302.h"unsigned char Write_…

docker 安装canal

一、新建文件夹 新建文件夹logs, 新建文件canal.properties instance.properties docker.compose.yml canal.propertie 修改如下&#xff1a; 修改instance.properties内容如下 1.1 canal.properties ################################################# ######### …

Day:006(1) | Python爬虫:高效数据抓取的编程技术(爬虫工具)

selenium介绍与安装 Selenium是一个Web的自动化测试工具&#xff0c;最初是为网站自动化测试而开发的&#xff0c;类型像我们玩游戏用的按键精灵&#xff0c;可以按指定的命令自动操作&#xff0c;不同是Selenium 可以直接运行在浏览器上&#xff0c;它支持所有主流的浏览器&am…

Microsoft Office LTSC 2021企业办公新标杆,稳定高效助力业务发展

Microsoft Office LTSC 2021包含Word、Excel、PowerPoint等常用组件&#xff0c;支持实时共享和智能转换功能&#xff0c;允许多个用户同时编辑文档&#xff0c;提高了团队协作效率。还加强了安全性和隐私保护&#xff0c;通过加密协议和安全验证等方法&#xff0c;有效防止了恶…

MySQL一些特殊功能的索引(6/16)

特殊功能性索引 B-Tree索引&#xff1a; InnoDB的默认索引类型&#xff0c;适用于多种查询操作。 可以用于等值查询、范围查询和索引列的组合查询。 创建B-Tree索引的示例&#xff1a; CREATE INDEX index_name ON table_name (column1, column2);全文索引&#xff08;FULLTEX…

如何将PHP的Webman框架打包成二进制文件运行

看了看webman的官方文档&#xff0c;发现居然还能打包为二进制&#xff0c;这样太厉害了吧&#xff01; 先执行这个 composer require webman/console ^1.2.24 安装这个console的包&#xff0c;然后 执行 php webman build:bin 8.1 结果谁想到它报错提示&#xff1a; 好…

Microsoft Maia

这把写一个更冷门的,受限于鄙人工作的原因,我可能得当一回谜语人,在不违规的情况下,尽量给大家解密Maia的一些特性(这种我写起来,就很难受...) 是的就是这个芯片,Asic The Maia 100 is the first in a series of Maia accelerators for AI, the company said. With 105…