Day51|leetcode 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

news2025/1/12 1:51:43

leetcode 309.最佳买卖股票时机含冷冻期

题目链接:309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode)

视频链接:动态规划来决定最佳时机,这次有冷冻期!| LeetCode:309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bilibili

题目概述

给定一个整数数组,其中第i表示第i天的股票价格 。

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

  • 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。

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

 

示例 1:

输入: prices = [1,2,3,0,2]
输出: 3 
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]

示例 2:

输入: prices = [1]
输出: 0

思路

依旧是动规五部曲

1.确定dp数组含义

dp[i][j]:第i天状态为j,所剩的最多现金为dp[i][j]。

要是按照前几题的思想来说,那么股票就会分为持有股票和不持有股票两种状态,但是本题因为有冷冻期,所以会把不持有股票的状态细分一下。

(1)dp[i][0]:持有股票状态(今天或者之前就买了)

不持有股票状态:

(2)dp[i][1]:保持卖出股票状态(前两天卖了股票,度过一天冷冻期或者前一天就卖出股票)

(3)dp[i][2]:今天卖出股票

(4)dp[i][3]:冷冻期(只有一天)

2.确定递推公式

(1)dp[i][0]:持有股票状态

1)前一天就已经买了:dp[i - 1][0]

2)今天买了,但是前一天是冷冻期:dp[i - 1][3] - prices[i]

3)今天买了,但是前一天是保持卖出股票的状态: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]:保持卖出股票状态

1)前一天就保持卖出股票状态:dp[i - 1][1]

2)前一天是冷冻期:dp[i - 1][3]

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

(3)dp[i][2]:今天卖出股票

1)今天卖:dp[i][2] = dp[i - 1][0] + prices[i]

(4)dp[i][3]:冷冻期

1)昨天把股票卖了:dp[i][3] = dp[i - 1][2]

3.数组初始化

dp[0][0] = -prices[0](一定是当天买入股票)

dp[0][1]=0

dp[0][2]=0

dp[0][3]=0

4.确定遍历顺序

从前向后

5.打印数组(以1,2,3,0,2为例)

代码实现

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len = prices.size();
        if(len == 0) return 0;
        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][3],max(dp[len - 1][1],dp[len - 1][2]));
    }
};

leetcode 714.买卖股票的最佳时机含手续费

题目链接:714. 买卖股票的最佳时机含手续费 - 力扣(LeetCode)

视频链接:动态规划来决定最佳时机,这次含手续费!| LeetCode:714.买卖股票的最佳时机含手续费_哔哩哔哩_bilibili

题目概述

给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。

你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。

返回获得利润的最大值。

注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。

示例 1:

   输入: prices = [1, 3, 2, 8, 4, 9], fee = 2

   输出: 8

解释: 能够达到的最大利润:

   在此处买入 prices[0] = 1

   在此处卖出 prices[3] = 8

   在此处买入 prices[4] = 4

   在此处卖出 prices[5] = 9

   总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8.

思路

本题和122题(买卖股票的最佳时机||)几乎一样,唯一的区别就是本题需要减去手续费而已。

代码实现

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

    }
};

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

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

相关文章

对比通达信主副图指标,排序指标的显示方式

**1.新建指标的注意事项&#xff1a;**打开指标公式编辑器&#xff0c;公式名称是要必填的、指标源码里面有参数要带上参数&#xff0c;不然会指报错、画线方法&#xff08;主图显示&#xff0c;还是幅图显示&#xff0c;以及是否要叠加k线&#xff0c;主图替换等等&#xff09…

七大基本判断问题,你都get到了吗

Hello,这里是mouche&#xff0c;当然你也可以叫我某车&#xff0c;反正大家都爱这么叫&#x1f601;最近看到一些判断就想记下来&#xff0c;这一篇算附带自己的思考和整理的整理型的博客吧&#xff0c;接下去如果有想到新的也会在这一篇进行整理如果有错误的可以在评论区提醒我…

圆圈加数字的css

方式一 .circle { width: 50px; height: 50px; border-radius: 50%; background-color: #f00; color: #fff; text-align: center; line-height: 50px; } .circle::before { content: attr(data-number); display: block; } <div class"circle" data-number"…

Hibernate(Spring Data)抓取策略

文章目录 示例代码放到最后&#xff0c;使用的是Springboot 项目1. 简介2. Hibernate抓取策略分类2.1 即时加载&#xff08;Eager Loading&#xff09;2.2 延迟加载&#xff08;Lazy Loading&#xff09;2.3 子查询加载&#xff08;Subselect Loading&#xff09;2.4 基于批处理…

【100天精通python】Day48:python Web开发_WSGI接口与使用

目录 1 WSGI接口 1.1 CGI 简介 1.2 WSGI 简介 1.3 定义 WSGI 接口 1.3.1 应用程序&#xff08;Application&#xff09; 1.3.2 服务器&#xff08;Server&#xff09; 1.4 WSGI 接口的使用示例 1.5 WSGI接口的优势 1 WSGI接口 上一节实现了静态服务器&#xff0c;但是当…

Cell子刊:肠道菌菌株之间的“明争暗斗”

抗生素耐药性质粒可以在肠道中不同肠杆菌科之间传播。本期经典文献解读&#xff0c;为大家带来发表在Cell Host and Microbe上的研究成果&#xff0c;探索具有相似营养需求的肠杆菌科沙门氏菌群如何在同一肠道中共同繁殖及质粒转移。 期刊&#xff1a;Cell Host Microbe …

八、MySQL(DML)如何修改表中的数据?

1、修改表数据 &#xff08;1&#xff09;基础语法&#xff1a; update 表名 SET 字段名1数值1,字段名2数值2&#xff0c;…… [where 条件]; &#xff08;2&#xff09; 操作实例&#xff1a; 第一步&#xff1a; 先准备一张表 insert into things values (10086,18,0x12…

spark支持深度学习批量推理

背景 在数据量较大的业务场景中&#xff0c;spark在数据处理、传统机器学习训练、 深度学习相关业务&#xff0c;能取得较明显的效率提升。 本篇围绕spark大数据背景下的推理&#xff0c;介绍一些优雅的使用方式。 spark适用场景 大数据量自定义方法处理、类sql处理传统机器…

掌握Kubernetes API:释放容器编排的潜力

Kubernetes API使用 1、 API是什么&#xff1f; API&#xff08;Application Programming Interface&#xff0c;应用程序接口&#xff09;&#xff1a; 是一些预先定义的接口&#xff08;如函数、HTTP接口&#xff09;&#xff0c;或指软件系统不同组成部分衔接的约定。 用来…

分类算法系列③:模型选择与调优 (Facebook签到位置预测)

目录 模型选择与调优 1、介绍 模型选择&#xff08;Model Selection&#xff09;&#xff1a; 调优&#xff08;Hyperparameter Tuning&#xff09;&#xff1a; 本章重点 2、交叉验证 介绍 为什么需要交叉验证 数据处理 3、⭐超参数搜索-网格搜索(Grid Search) 介绍…

合宙Air724UG LuatOS-Air LVGL API控件--图表 (Chart)

图表 (Chart) 一幅图胜过一千个字&#xff0c;通过图表展示出的数据内容能让用户更快速有效的了解数据特征。 代码示例 – 创建图表 chart lvgl.chart_create(lvgl.scr_act(), nil) lvgl.obj_set_size(chart, 200, 150) lvgl.obj_align(chart, nil, lvgl.ALIGN_CENTER, 0, …

聊聊Http服务化改造实践

在微服务架构体系中远程RPC调用主要包括Dubbo与Http调用两个大类&#xff0c;由于Dubbo拥有服务注册中心&#xff0c;并且起服务的命名非常规范&#xff0c;使用包名.类名.方法名进行描述。 而http调用通常都是使用httpclient等相关类库&#xff0c;这些在使用上并没有问题&am…

常见问题。

警告&#xff1a;There are 2 audio listeners in the scene. Please ensure there is always exactly one audio listener in the scene. 解决&#xff1a;两个摄像机两个audio listeners组件&#xff0c;禁用一个就好了。 错误&#xff1a;Scene ‘xxxxx’ couldn’t be loa…

在 Amazon 搭建无代码可视化的数据分析和建模平台

现代企业常常会有利用数据分析和机器学习帮助解决业务痛点的需求。如制造业中&#xff0c;利用设备采集上来的数据做预测性维护&#xff0c;质量控制&#xff1b;在零售业中&#xff0c;利用客户端端采集的数据做渠道转化率分析&#xff0c;个性化推荐等。 亚马逊云科技开发者…

能直接运营的发接任务平台小程序搭建开发演示

有个项目估计做过互联网的小伙伴都听说过——发接任务平台。 基本每年都有发接任务平台关站&#xff0c;但又有新的平台出来&#xff0c;往复循环&#xff0c;无比热闹。这在互联网圈不常见&#xff0c;互联网项目很多都是风头过去了就结束了&#xff0c;但发接任务年年似乎都…

HTML 播放器效果

效果图 实现代码 <!DOCTYPE HTML> <html><head><title>爱看动漫社区 | 首页 </title><link href"css/bootstrap.css" relstylesheet typetext/css /><!-- jQuery --><script src"js/jquery-1.11.0.min.js"…

进程间通信-Binder

Binder Binder框架概述服务端Binder驱动客户端 设计服务端和客户端设计服务端客户端设计 Binder与ServiceServiceAIDL 保证包裹内参数顺序IMusicPlayerServiceProxyStub 系统服务中的Binder对象ServiceManger管理的服务理解Manger功能快捷键合理的创建标题&#xff0c;有助于目…

19 Linux之Python定制篇-apt软件管理和远程登录

19 Linux之Python定制篇-apt软件管理和远程登录 文章目录 19 Linux之Python定制篇-apt软件管理和远程登录19.1 apt软件管理19.1.1 apt介绍19.1.2 更新软件下载地址-阿里源19.1.3 使用apt完成安装和卸载vim 19.2 远程登录Ubuntu 学习视频来自于B站【小白入门 通俗易懂】2021韩顺…

两个pdf文件合并为一个怎么操作?分享pdf合并操作步骤

不管是初入职场的小白&#xff0c;还是久经职场的高手&#xff0c;都必须深入了解pdf&#xff0c;特别是关于pdf的各种操作&#xff0c;如编辑、合并、压缩等操作&#xff0c;其中合并是这么多操作里面必需懂的技能之一&#xff0c;但是很多人还是不知道两个pdf文件合并为一个怎…

基于材料生成算法优化的BP神经网络(预测应用) - 附代码

基于材料生成算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于材料生成算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.材料生成优化BP神经网络2.1 BP神经网络参数设置2.2 材料生成算法应用 4.测试结果&#xff1a;5…