代码随想录训练营第51天|LeetCode 309.最佳买卖股票时机含冷冻期、 714.买卖股票的最佳时机含手续费

news2024/11/25 17:09:15

参考

代码随想录

题目一:LeetCode 309.最佳买卖股票时机含冷冻期

如果没有冷冻期,就可以只定义两个状态,加入冷冻期后定义下面的四个状态:

  • 状态一( j = 0):买入状态,不一定当天买入,也可能是之前就已经买入了
  • 状态二( j = 1):卖出状态且已经度过了冷冻期
  • 状态三( j = 2):今天卖出,还未度过冷冻期
  • 状态四(j = 3):冷冻期
  1. 确定dp数组下标及其含义
    dp[i][j]:第i天j状态下剩余的最大现金,j状态就是上面定义的状态

  2. 确定递推公式
    dp[i][0]:由三个状态可以得到这个状态,一是前一天已经是这个状态,今天天保持前一天的状态,即dp[i][0] = dp[i-1][0];二是前一天是状态二(卖出状态且已经度过了冷冻期),所以今天可以买入,即dp[i][0] = dp[i-1][1] - prices[i];三是前一天是冷冻期,因为冷冻期只持续一天,因此今天可以买入,即dp[i][0] = dp[i-1][3] - prices[i]。综上所述,dp[i][0] = max(dp[i-1][0],dp[i-1][1] - prices[i],dp[i-1][3] - prices[i])。

    dp[i][1]:这个状态可以由两个状态得到,一是前一天就是当前状态,因此今天继续保持,即dp[i][1] = dp[i-1][1];二是前一天是冷冻期,到今天就度过了冷冻期,因此dp[i][1] = dp[i-1][3]。综上,dp[i][1] = max(dp[i-1][1],dp[i-1][3])。

    dp[i][2]:这个状态是卖出的当天,因此前一个状态只能是状态一,所以dp[i][2] = dp[i-1][0] + prices[i]。

    dp[i][3]:因为冷冻期只持续一天,因此前一天只能是状态三,因此dp[i][3] = dp[i-1][2]。

综上,递推公式为:

dp[i][0] = max(dp[i-1][0],max(dp[i-1][1] - prices[i],dp[i-1][3] - 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];
  1. 初始化dp数组
dp[0][0] = -prices[0];
dp[0][1] = 0;
dp[0][2] = 0;
dp[0][3] = 0;
  1. 确定遍历顺序
    第i天的状态由第i-1天来确定,因此要从前往后遍历。

  2. 推导dp数组
    在这里插入图片描述
    最终结果是状态二、状态三和状态四的最大值。

完整的代码实现如下:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<vector<int>> dp(prices.size(),vector<int>(4));
        //初始化
        dp[0][0] = -prices[0];
        dp[0][1] = 0;
        dp[0][2] = 0;
        dp[0][3] = 0;
        //遍历
        for(int i = 1; i < prices.size(); i++){
            dp[i][0] = max(dp[i-1][0],max(dp[i-1][1] - prices[i],dp[i-1][3] - 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.back()[1],max(dp.back()[2],dp.back()[3]));
    }
};

题目二:LeetCode 714.买卖股票的最佳时机含手续费

这个题在122. 买卖股票的最佳时机 II的基础上加入手续费,没有手续费的动态规划的解法在代码随想录训练营第49天|LeetCode 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II中已经做过,加入手续费之后无非就在卖出状态上加入手续费,其余都一样,加入手续费后的递推公式如下:

dp[i][0] = min(prices[i] - dp[i-1][1],dp[i-1][0]);
dp[i][1] = max(dp[i-1][1],prices[i]-dp[i][0]-fee);

完整的代码实现如下:

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

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

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

相关文章

设计模式-java

设计模式: 纸上得来终觉浅&#xff0c;绝知此事要躬行 设计原则 1) 单一职责原则 com.zh.designpatterns.design_principles.demo01_single_principle 概念&#xff1a;对类来说的&#xff0c;即一个类应该只负责一项职责。如类A负责两个不同职责&#xff1a;职责1&#x…

[AAAI 2022]多角度意图分解图网络的捆绑推荐

Multi-View Intent Disentangle Graph Networks for Bundle Recommendation捆绑推荐是什么&#xff1f;Bundle recommendation offers promotions of bundled items instead of a single one, which is a common strategy for sales revenue increase and latent customer mini…

谈谈对IO多路复用的select机制的理解

一、技术背景 如果要彻底明白select机制&#xff0c;还是要首先去了解IO&#xff0c;网络编程、Blocking IO、No Blocking IO的相关概念及底层实现。下面只是作为技术背景去介绍这几个概念。 1、理解IO本质 IO从英文本身去解释就是输入输出(Input/Output)&#xff0c;这里不…

web前端期末大作业:基于HTML+CSS+JavaScript实现网上鲜花店网站设计(14页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

手机进销存网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 功能模块包括&#xff1a;员工模块、手机类型模块、供应商模块、采购模块、客户模块、销售模块、统计模块、库存模块 (1…

Springboot内置的工具类之FileCopyUtils

前言 Spring内置的工具类里&#xff0c;最喜欢用的就是文件读写这一部分&#xff0c;虽然原生的写法也没几句&#xff0c;但是就是懒&#xff0c;不想循环、判断什么的&#xff0c;直接调用现成的静态方法&#xff0c;多高效&#xff0c;哈哈&#xff0c;这就是懒人必备。 Res…

UE5——动画混合(2)

一、引言 接上文《UE5——动画混合》&#xff0c;UE5还提供了 遮罩混合、惯性化两种混合&#xff0c;下面将讲述这两种动画混合方式 二、UE5上实现 1、遮罩混合 遮罩混合与《UE5——动画混合》中的 “骨骼的分层混合” 的运行逻辑其实是的一样的。相比起 “骨骼的分层混合”…

【SpringBoot+MyBatis】二级缓存以及使用Redis缓存数据

在MyBatis中&#xff0c;存在一级缓存以及二级缓存。一级缓存是默认自动开启&#xff0c;而二级缓存需要我们手动去开启。但看到这篇文章的人&#xff0c;大部分都是在做项目才发现的问题&#xff1a;每次访问数据都要查询一遍又一遍的数据库&#xff0c;这是在控制台上可以发现…

叶酸偶联N-季铵化壳聚糖(FA-HTCC)

叶酸偶联N-季铵化壳聚糖(FA-HTCC) 中文名称&#xff1a;叶酸偶联N-季铵化壳聚糖 英文名称&#xff1a;FA-HTCC 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体 包装&#xff1a;瓶装/袋装 溶解性&#xff1a;溶于大…

MYSQL 主从复制 --- binlog

一个MYSQL数据库存在的问题 在谈主从复制之前&#xff0c;应该都会有一个疑问&#xff0c;那么就是一个MYSQL数据库存在的问题呢&#xff1f; 1. 读和写所有压力都由一台数据库承担&#xff0c;压力大 2. 数据库服务器磁盘损坏则数据丢失&#xff0c;单点故障 为了解决我们可以…

Spark RDD介绍

RDD 引出问题 Spark是如何将多台机器上的数据通过一个类型来关联实现的&#xff1f; 答&#xff1a;通过RDD类型来实现关联 一、RDD简介 RDD&#xff08;Resilient Distributed Dataset&#xff09;&#xff1a;弹性分布式数据集 RDD的本质&#xff1a; 一个抽象的逻辑上的…

项目运行久了很卡,手动执行垃圾回收机制,秒丝滑

问题 当项目运行久了&#xff0c;内存会被大量占用。如何不重启项目&#xff0c;释放内存&#xff0c;继续丝滑开发呢&#xff1f; 回答 手动执行垃圾回收机制 打开任务管理器康康&#xff1a; 巨卡&#xff0c;无敌卡&#xff0c;解决它&#xff01; 打开命令行工具&…

Kaggle竞赛——Titanic泰坦尼克之灾(保姆级基础版)

Kaggle竞赛网址&#xff1a;https://www.kaggle.com/c/titanic 本次Kaggle泰坦尼克之灾分析过程大致分为&#xff1a; 第1步&#xff1a;了解数据 第2步&#xff1a;分析数据之间的关系 第3步&#xff1a;缺失项数据处理 第4步&#xff1a;特征因子化 第5步&#xff1a;处理特…

DBCO-SS-活性酯|DBCO-SS-NHS酯

DBCO-SS-活性酯|DBCO-SS-NHS酯 名称;DBCO-SS-活性酯|DBCO-SS-NHS酯 CAS NO&#xff1a;1435934-53-4 分子量&#xff1a;565.66 分子式&#xff1a;C28H27N3O6S2 含 量&#xff1a;>95% 外 观&#xff1a;固体粉末 保存&#xff1a;-20避光避湿 结构式&#xff1a; …

记录--手把手带你开发一个uni-app日历插件(并发布)

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 相信我们在开发各类小程序或者H5&#xff0c;甚至APP时&#xff0c;会把uni-app作为一个技术选型&#xff0c;其优点在于一键打包多端运行&#xff0c;较为强大的跨平台的性能。但是&#xff0c;只要开…

我为什么建议前端将Python 作为第二语言?

前言 “如何摆脱不停切图的困局&#xff1f;” 这不是一篇制造焦虑的文章&#xff0c;而是充满真诚建议的Python推广文。 当谈论到编程入门语言时&#xff0c;大多数都会推荐Python和JavaScript。 实际上&#xff0c;两种语言在方方面面都非常强大。 而如今我们熟知的ES6语…

用Java语言简单实现:炸金花,不知道你有没有兴趣跟着笔者来研究一下呀

说实话&#xff0c;到目前为止&#xff0c;笔者学习Java语言也有着进两个多月了吧&#xff01;&#xff01;但是&#xff0c;一直毫无进度&#xff01;博客更新的也很少&#xff0c;仅仅10篇刚出头&#xff0c;而且浏览量也很少&#xff0c;这样很不符合我的气质&#xff01;&a…

汉字风格迁移----FtransGAN

🚀针对的问题 以前的大多数作品都是通过将给定子集的风格转移到未见子集的内容来解决这个问题的。然而,他们只关注同一语言中的字体样式转换。在许多任务中,我们需要学习一种语言的字体信息,然后将其应用到其他语言。现有的方法很难完成这样的任务。 图1。几个应用实例。…

03_2排序算法:快速排序、归并排序

开始系统学习算法啦&#xff01;为后面力扣和蓝桥杯的刷题做准备&#xff01;这个专栏将记录自己学习算法是的笔记&#xff0c;包括概念&#xff0c;算法运行过程&#xff0c;以及代码实现&#xff0c;希望能给大家带来帮助&#xff0c;感兴趣的小伙伴欢迎评论区留言或者私信博…

IIS2MDCTR传感器规格、ISM303DACTR磁力计应用、STPSC20H12WL二极管特点

IIS2MDC 3轴数字式磁性传感器具有高达50高斯的磁场动态范围以及16位数据输出。IIS2MDC设有I2C串行总线接口&#xff0c;可支持标准模式 (100kHz)、快速模式 (400kHz)、快速模式 (1MHz) 以及高速模式 (3.4MHz)。 该传感器还设有SPI串行标准接口&#xff0c;另外对其进行配置后可…