代码随想录算法训练营第51天 | 309.最佳买卖股票时机含冷冻期 + 714.买卖股票的最佳时机含手续费 + 股票问题总结

news2024/11/17 1:46:48

今日任务

目录

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

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

股票问题总结


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

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

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

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

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

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

提示:出现冷冻期后,状态变得更加复杂,具体可以区分出如下四个状态:

  • 状态一:持有股票状态(今天买入股票,或者是之前就买入了股票然后没有操作,一直持有)
  • 不持有股票状态,这里就有两种卖出股票状态
    • 状态二:保持卖出股票的状态(两天前就卖出了股票,度过一天冷冻期。或者是前一天就是卖出股票状态,一直没操作)
    • 状态三:今天卖出股票
  • 状态四:今天为冷冻期状态,但冷冻期状态不可持续,只有一天

因为本题有冷冻期,而冷冻期的前一天,只能是 「今天卖出股票」状态,如果是 「不持有股票状态」那么就很模糊,因为不一定是 卖出股票的操作。

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        n = len(prices)
        if n == 0:
            return 0
        dp = [[0] * 4 for _ in range(n)]
        dp[0][0] = -prices[0]  #达到买入状态
        dp[0][1] = 0 #保持卖出状态
        dp[0][2] = 0 #今天卖出状态
        dp[0][3] = 0 #今天冷冻状态
        for i in range(1, n):
            dp[i][0] = max(dp[i-1][0], 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[-1])

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

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

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

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

返回获得利润的最大值。

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

提示:在 122.买卖股票的最佳时机II 的基础上,每次卖出时减去手续费

class Solution:
    def maxProfit(self, prices: List[int], fee: int) -> int:
        if len(prices) == 0:
            return 0
        dp = [[0] * 2 for _ in range(len(prices))]
        dp[0][0] = -prices[0]
        dp[0][1] = 0
        for i in range(1, len(prices)):
            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[-1][1]

股票问题总结

股票问题总结篇:代码随想录

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

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

相关文章

字节测试工程师总结的自动化测试10个最佳实践

虽然大家都知道坚果是非常健康和有营养的,但是,当你尝试吃它的时候,我猜测过程都不会很顺利。 现实就是那么相似,我们都知道测试自动化对软件开发有好处(就像坚果对我们的身体一样!)&#xff0…

【Redis】Redis五种常用数据类型的使用方法

文章目录 一、String数据类型1. SET/GET/APPEND/STRLEN2. INCR/DECR/INCRBY/DECRBY3. GETSET4. SETEX5. SETNX6. MSET/MGET/MSETNX 二、List数据类型1. LPUSH/LPUSHX/LRANGE2. LPOP/LLEN3. LREM/LSET/LINDEX/LTRIM4. LINSERT5. RPUSH/RPUSHX/RPOP/RPOPLPUSH 三、Hash数据类型&a…

【力扣】DP/贪心:1681. 最小不兼容性

【力扣】DP/贪心:1681. 最小不兼容性 文章目录 【力扣】DP/贪心:1681. 最小不兼容性1. 题目描述2. 解题2.1 不可行2.2 DP(预处理 状态压缩 动态规划) 参考 1. 题目描述 给你一个整数数组 nums​​​ 和一个整数 k 。你需要将这…

【C++】一文理清C++中的五种强制类型转换

深入理解C中五种强制类型转换的使用场景 一、C风格的强制类型转换 使用形式: Type b (Type)a;C风格的强制类型转换很容易理解,不管什么类型都可以直接进行转换。C也支持C风格的强制类型转换,但是C风格的强制类型转换可能会带来一些隐患&a…

2023.6.29-限定次数的循环操作

首先试着实现一个功能:键入一个整数,然后显示出这个整数个“*”: 代码: int a;printf("请输入一个整数:");scanf("%d",&a);while (a-- > 0)printf("*");printf("\n")…

模拟信号、数字信号

1、模拟信号、模拟电路 1)模拟信号 是指连续变化的电信号,比如说话时的声音信号。 模拟信号可以用连续的电压或电流来表示( 模拟信号就是电信号)数字信号则是用离散的电压或电流来表示(0 或 1) 2&#x…

ROS:常用命令汇总

目录 一、前言二、rosnode三、rostopic3.1rostopic list3.2rostopic pub3.3rostpic echo3.4rostopic info 四、rosservice4.1rosservice args4.2rosservice call 五、rosmsg5.1rosmsg package5.2rosmsg show 六、rossrv6.1rossrv package6.2rossrv show 七、rosparam7.1rospara…

CSDN | CDC 城市开发者联盟开始招募啦!

一、CDC(城市开发者联盟)介绍 CDC 是由 CSDN 发起的公益性同城高端开发者社区,全称 City Developers Community,通过在每个城市招募和培养“CDC 城市合伙人”,一起在当地构建“千城千面”的线下开发者社交圈&#xff…

arcserver图层数据导出插件

arcserver数据导出插件使用 下载地址:https://download.csdn.net/download/u011405698/87966050?spm1001.2014.3001.5503 如果需要代码或商业合作请联系公众号:世奇 插件不依赖其他第三方类库,只依赖arcpy,使用简单方便。可以…

C++标准模板库STL (未完)

概述 STLstandard template library是 C 标准库的一部分&#xff0c;无需单独安装&#xff0c;只需#include 头文件 什么是模板&#xff1f;见c面向对象程序设计中模板一节 顺序性容器 vector 向量 变长数组 声明 vector<类型名> 变量名[数组长度];类型名可以是已有…

社交商务时代已经到来,ss客服帮您抓住风口

社交商务时代已经到来&#xff0c;ss客服帮您抓住风口 近年来&#xff0c;社交媒体商务的概念已成为一股强大的力量。通过将社交媒体平台的影响力和影响力与在线购物的便利性相结合&#xff0c;它正在彻底改变企业与客户互动和销售产品或服务的方式。 什么是社交商务&#xf…

MyBatisPlus代码生成器插件

1、下载IDEA插件&#xff1a;MybatisPlus。 2、使用插件生成代码 首先点击IDEA导航菜单上的Other选项&#xff0c;然后进行数据库和代码生成器的配置&#xff1a; 数据库配置&#xff1a; 代码生成器配置&#xff0c;然后点击code generator&#xff1a; 最会插件会按照配置…

Timeout while checking target RAM, RAMCode did not respond in time

问题 使用jlink烧入gd32f450时&#xff0c;jlink提示错误Timeout while checking target RAM, RAMCode did not respond in time; 解决办法 原因是RAM的地址范围错误&#xff0c;默认选择gd32f450vi的ram大小是512k&#xff0c;但是该芯片中的ram并不连续&#xff0c;其中64…

C++ 动态内存

了解动态内存在 C 中是如何工作的是成为一名合格的 C 程序员必不可少的。C 程序中的内存分为两个部分&#xff1a; 栈&#xff1a;在函数内部声明的所有变量都将占用栈内存。堆&#xff1a;这是程序中未使用的内存&#xff0c;在程序运行时可用于动态分配内存。 很多时候&…

【C/C++】类成员函数指针 定义 使用方法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

使用conda虚拟环境,Jupyter Notebook 链接不上 kernel

1&#xff0c;检查 ipykernel 和 ipython 是否一致 输入pip list 或者conda list检查一下相应库的版本是不一致 不一致的话&#xff0c;可以更新这两个库的版本&#xff1a;pip install --upgrade 库名 2&#xff0c;看控制台的报错&#xff0c;如果是报404&#xff0c;内核找不…

leetcode 145. 二叉树的后序遍历

2023.6.24 继上一题前序遍历&#xff0c;这道后序遍历就很容易了&#xff0c;把递归的顺序稍微改一下就行。 递归法&#xff1a; class Solution { public:void travelsal(TreeNode* cur , vector<int>& ans){if(cur nullptr) return;travelsal(cur->left , an…

如何设计真正高性能高并发分布式系统?

1 、引子 软件复杂性来源于几个方面&#xff1a;高并发高性能、高可用、可扩展、低成本、低规模、可维护、安全等。架构演化、发展都是为了试图降低复杂性&#xff1a; 高并发、高性能&#xff1a;互联网系统特点&#xff0c;用户量大&#xff0c;请求量大&#xff0c;高并发高…

NLP学习笔记(二)

文章目录 &#xff08;一&#xff09;负采样&#xff08;二&#xff09;GloVe1.带全局语料库的跳元模型2.GloVe模型3.问题4.跳元模型与GloVe模型的比较 &#xff08;三&#xff09;问题1.参数初始化2.梯度下降3.下游任务4.句法信息5.似然估计6.词向量表示 &#xff08;一&#…

MySQL基础篇(day04,复习自用)

MySQL第四天 单行函数内容练习 聚合函数内容练习 单行函数 内容 #第七章 单行函数 SELECT ABS(-123),ABS(32),SIGN(-23),SIGN(43),PI(),CEIL(32.32),CEILING(-43.23),FLOOR(32.32), FLOOR(-43.23),MOD(12,5) FROM DUAL;#取随机数 SELECT RAND(),RAND(),RAND(10),RAND(10),RAND…