DAY55:动态规划(买卖股票的最佳时机3)

news2025/1/17 2:55:23

Leetcode: 309 最佳买卖股票时机含冷冻期

这道题比上面状态更多,是因为卖出股票后,你无法在第二天买入股票 (即冷冻期为1天)。

状态

状态一:持有股票状态(今天买入股票,或者是之前就买入了股票然后没有操作,一直持有)

不持有股票状态,这里就有两种卖出股票状态

状态二:保持卖出股票的状态(两天前就卖出了股票,度过一天冷冻期。或者是前一天就是卖出股票状态,一直没操作)

状态三:今天卖出股票

状态四:今天为冷冻期状态,但冷冻期状态不可持续,只有一天!(状态4包含在状态2中)

递推公式

这样递推公式就会比较复杂

1、买入股票状态(状态一)即:dp[i][0],有两个具体操作:

操作一:前一天就是持有股票状态(状态一),dp[i][0] = dp[i - 1][0]

操作二:今天买入了,有两种情况

前一天是冷冻期(状态四),dp[i - 1][3] - prices[i]

前一天是保持卖出股票的状态(状态二),dp[i - 1][1] - prices[i]

那么dp[i][0] = max(dp[i - 1][0], dp[i - 1][3] - prices[i], dp[i - 1][1] - prices[i]);

2、保持卖出股票状态(状态二)即:dp[i][1],有两个具体操作:

操作一:前一天就是状态二

操作二:前一天是冷冻期(状态四)

dp[i][1] = max(dp[i - 1][1], dp[i - 1][3]);

3、今天就卖出股票状态(状态三),即:dp[i][2] ,只有一个操作:

昨天一定是持有股票状态(状态一),今天卖出

即:dp[i][2] = dp[i - 1][0] + prices[i];

4、冷冻期状态(状态四),即:dp[i][3],只有一个操作:

昨天卖出了股票(状态三)

dp[i][3] = dp[i - 1][2];

最后结果是取 状态二,状态三,和状态四的最大值。

弄清楚这些关系之后,代码就很好写了。

时间复杂度:O(n)

空间复杂度:O(n)

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len = prices.size();
        vector<vector<int>> dp(len, vector<int>(4, 0));
        dp[0][0] = -prices[0];
        for(int i = 1; i < len; i++){
            dp[i][0] = max(dp[i - 1][0], max(dp[i - 1][3] - prices[i], dp[i - 1][1] - prices[i]));
            dp[i][1] = max(dp[i - 1][1], dp[i - 1][3]);
            dp[i][2] = dp[i - 1][0] + prices[i];
            dp[i][3] = dp[i - 1][2];
        }
        return max(dp[len-1][1],max(dp[len-1][2],dp[len-1][3]));

    }
};

Leetcode: 714 买卖股票的最佳时机含手续费

这题可以视为122 买卖股票的最佳时机II的变种,因为增加了手续费,这样我们只需要在卖出这只股票的时候减去手续费就好了,因此所有的代码保持不变,只需要更新卖出股票的时候的dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);就可以了。

时间复杂度:O(n)

空间复杂度:O(n)

代码如下:

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        int len = prices.size();
        vector<vector<int>> dp(len, vector<int>(2, 0));
        dp[0][0] -= prices[0];
        dp[0][1] = 0;
        for (int i = 1; i < len; i++) {
            dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]); 
            dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);
        }
        return dp[len - 1][1];

    }
};

总结

这段时间跟着代码随想录完成了下述的股票问题,受益匪浅。

代码随想录

做这种类型的题目,一定要注意状态的划分和状态的变化。

1、分析状态和状态变化的关系,只有这些清楚了才能正确解题,找到递推公式。需要重点掌握这些状态函数的写法。

2、注意初始化,初始化的数值设置很重要,不然容易出错。

3、最后输出往往是取最大的。

4、递推顺序,一般是从前到后。

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

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

相关文章

SQL查询转化为 Elasticsearch 查询

使用SQL 转化为查询 Elasticsearch 支持 sql 语句转化为 elasticsearch 的 查询语句 第一步&#xff1a; 打开在线转换工具的网页&#xff0c;进入工具页面 第二步&#xff1a;在指定的输入框中输入需要转换的 sql 语句。 您学会了这么简单的办法

什么是 Wake-on-LAN?如何使用 Splashtop 远程喊醒电脑

在当今数字互联的世界里&#xff0c;远程访问电脑已不仅仅是一种便利&#xff0c;而是许多人的需要。无论是远程工作、IT 支持&#xff0c;还是管理整个网络中的计算机群&#xff0c;我们都必须掌握正确的工具和技术。 其中一项在远程访问中发挥关键作用的技术是 Wake-on-LAN …

AI:133-基于深度学习的工业质检自动化

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

大数据信用报告查询方式一般有几种?哪种比较好?

在了解这个问题之前&#xff0c;想必你对大数据信用与人行信用的区别都是比较清楚了&#xff0c;本文呢就着重讲一下大数据信用报告查询方式有几种&#xff0c;哪种比较好&#xff0c;感兴趣的朋友不妨一起去看看。 大数据信用报告常见的三种查询方式&#xff1a; 一、二维码分…

SG-8201CJA(汽车可编程晶体振荡器)

爱普生的SG-8021CJA是一款符合AEC-Q100标准的晶体振荡器&#xff0c;专为要求苛刻的汽车/ADAS应用&#xff08;如激光雷达和相机ECU&#xff09;而设计。它采用爱普生的内部低噪声小数NPLL&#xff0c;输出 频率高达170MHz&#xff0c;相位抖动小于1/25&#xff0c;稳定性比之前…

SpringBoot+WebSocket实现即时通讯(二)

前言 紧接着上文《SpringBootWebSocket实现即时通讯&#xff08;一&#xff09;》 本博客姊妹篇 SpringBootWebSocket实现即时通讯&#xff08;一&#xff09;SpringBootWebSocket实现即时通讯&#xff08;二&#xff09;SpringBootWebSocket实现即时通讯&#xff08;三&…

【教3妹学编程-算法题】相同分数的最大操作数目 II

3妹&#xff1a;2哥&#xff0c;干嘛呢&#xff0c;怎么又在吃泡面 2哥 : 这不是过年下血本&#xff0c;给小侄子买了一个ps5吗&#xff0c; 哎&#xff0c;我自己都舍不得用&#xff0c;不能让人说咱小气不是。 3妹&#xff1a;神马&#xff0c;他才6岁吧&#xff0c; 就这么喜…

【4.1计算机网络】TCP-IP协议簇

目录 1.OSI七层模型2.常见协议及默认端口3.TCP与UDP的区别 1.OSI七层模型 osi七层模型&#xff1a; 1.应用层 2.表示层 3.会话层 4.传输层&#xff1a;TCP为可靠的传输层协议。 5.网络层 6.数据链路层 7.物理层 2.常见协议及默认端口 3.TCP与UDP的区别 例题1. 解析&#xff1…

APISIX 可观测性最佳实践

APISIX 介绍 Apache APISIX 是一个动态、实时、高性能的云原生 API 网关。它构建于 NGINX ngx_lua 的技术基础之上&#xff0c;充分利用了 LuaJIT 所提供的强大性能。 APISIX 主要分为两个部分&#xff1a; APISIX 核心&#xff1a;包括 Lua 插件、多语言插件运行时&#x…

2024年适合小白的副业—steam搬砖项目

对于普通人&#xff0c;找一个常年稳定&#xff0c;有个人全程带的项目难能可贵&#xff01; 别去想快速路&#xff0c;别去想挂机&#xff0c;作弊、别去想躺赚&#xff0c;否则最后又是竹篮打水一场空&#xff01;&#xff01; 普通人也可以靠steam搬砖项目这个翻身&#xf…

Net2FTP网站搭建并结合内网穿透实现远程访问本地个人文件

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一&#xff0c;特别是智能设备的大面积使用&#xff0c;无论是个人…

psm的stata实现

1. PSM 简介 在经济学中&#xff0c;我们通常希望评估某项公共政策实施后的效应&#xff0c;为此&#xff0c;我们构建 "处理组" 和 "控制组" 以评估「处理效应 (treatment effect)」。然而&#xff0c;我们的数据通常来自非随机的观察研究中&#xff0c;处…

SpringBoot集成阿里云OSS、华为云OBS、七牛云、又拍云等上传案例【附白嫖方案】【附源码】

1. 项目背景 唉&#xff01;本文写起来都是泪点。不是刻意写的本文&#xff0c;主要是对日常用到的文件上传做了一个汇总总结&#xff0c;同时希望可以给用到的小伙伴带来一点帮助吧。 上传本地&#xff0c;这个就不水了&#xff0c;基本做技术的都用到过吧&#xff1b; 阿里…

MySQL的备份与恢复案例

新建数据库 数据库备份&#xff0c;数据库为school&#xff0c;素材如下1.创建student和score表CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address…

【ansible】自动化运维ansible之playbook剧本编写与运行

目录 一、ansible剧本playbook的组成 二、palybook的基础应用: 实操1&#xff1a;通过palybooks完成nginx的安装 第一种&#xff1a;通过yum安装nginx 第二种&#xff1a;通过编译安装nginx 实操2&#xff1a;playbook定义、引用变量​​​​​​​ 实操3&#xff1a;通过…

maptalks多边形区域和点位-vue组件

多边形 <!-- 地图组件 --> <template><div :id"id" class"container"></div> </template><script> import _ from "lodash"; import "maptalks/dist/maptalks.css"; import * as maptalks from &…

有趣的 Streamlit

先看一则新闻&#xff1a;「Snowflake」以8亿美元收购「Streamlit」&#xff0c;以帮助客户构建基于数据的应用程序 Streamlit 是什么&#xff1f;去年过年前好好研究学习了一番&#xff0c;的确是个很有意思的面向数据开发者的工具&#xff0c;让不懂前端&#xff0c;只懂一点…

SpringBoot配置文件日志

目录 一、SpringBoot配置文件的作用 二、SpringBoot配置文件的分类 1、application.properties 2、application.yml 3、application.yaml 三、使用配置文件实例--验证码 1、使用Kaptcha插件生成验证码 2、网页需求分析 3、前端页面 4、发送请求 5、服务器作出响应 …

反射reflecttion的入门理解+暴力反射的应用简介

反射怎么理解,&#xff08;个人白话理解,有个类,类中有很多属性、方法、构造器&#xff0c;可以通过一面镜子将类里面的东西像光一样反射出来&#xff0c;被我们看到和使用&#xff0c;reflecttion其实也可以理解为映像&#xff0c;主要为了获取类中私有的东西&#xff0c;通过…

骨传导耳机是什么?骨传导耳机的优缺点是什么

骨传导耳机是什么&#xff1f;骨传导耳机采用一种创新的声音传输方式&#xff0c;它通过人体的颅骨、骨迷路、内耳淋巴液、螺旋器和听觉中枢传递声波。与传统耳机不同&#xff0c;骨传导耳机仅需悬挂在耳旁即可听见声音。 骨传导耳机的优缺点 缺点 相较传统耳机&#xff0c;由…