代码随想录训练营Day 53|力扣309.最佳买卖股票时机含冷冻期 、714.买卖股票的最佳时机含手续费、总结

本文主要是介绍代码随想录训练营Day 53|力扣309.最佳买卖股票时机含冷冻期 、714.买卖股票的最佳时机含手续费、总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

代码随想录

代码:

class Solution {
public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(),vector<int>(4,0)); // 因为冷冻期是在卖出股票的后一天,所以必须指出是哪一天卖出了股票,也就是我们要把这个状态单独定义出来// dp[i][0] 第i天持有股票的最大利润// dp[i][1] 第i天保持卖出股票的最大利润// dp[i][2] 第i天当天卖出股票的最大利润// dp[i][3] 第i天为冷冻期dp[0][0] = -prices[0];int n = prices.size();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[n - 1][3], max(dp[n - 1][2], dp[n - 1][1]));}
};

 思路:

        dp数组的含义:dp[i][0] 第i天持有股票的最大利润;dp[i][1] 第i天保持卖出股票的最大利润;dp[i][2] 第i天当天卖出股票的最大利润;dp[i][3] 第i天为冷冻期的最大利润。

(因为冷冻期是在卖出股票的后一天,所以必须指出是哪一天卖出了股票,也就是我们要把这个状态单独定义出来。)

        dp数组的递推公式:

             // 持有股票:前一天就持有了 或 前一天已经过了冷冻期,今天买入股票 或 前一天就是冷冻期,今天买入股票

            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];

        dp数组的初始化: 将dp[0][0]初始化为-prices[0]。这几道买卖股票的题都是把第0天买入股票的情况初始化为-prices[0]

        dp数组的遍历顺序:后一天的状态依赖于前一天的状态,正序遍历。

细节:我在最后返回值的时候,知道max在比较三个数的时候要嵌套着用了,但是我忘记了递推公式里持有股票也是比较三个值。。。

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

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

代码随想录

代码:

class Solution {
public:int maxProfit(vector<int>& prices, int fee) {int n = prices.size();vector<vector<int>>dp(n,vector<int>(2,0));// dp[i][0] 第i天持有股票的最大利润// dp[i][1] 第i天不持有股票的最大利润dp[0][0] = -prices[0];for(int i = 1; i < n; 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[n - 1][1];}
};

 思路:

        dp数组的含义:dp[i][0] 第i天持有股票的最大利润;dp[i][1] 第i天不持有股票的最大利润

        dp数组的递推公式:注意手续费是在卖出股票时付 !!

             // 持有股票: 前一天就持有 或 前一天不持有,今天买入

            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);

        dp数组的初始化: 将dp[0][0]初始化为-prices[0]。这几道买卖股票的题都是把第0天买入股票的情况初始化为-prices[0]

        dp数组的遍历顺序:后一天的状态依赖于前一天的状态,正序遍历。 

3.总结

        买卖股票问题大致遇到这么几类:

        

共同点就是: 这几道买卖股票的题都是把第0天买入股票的情况初始化为-prices[0]

这篇关于代码随想录训练营Day 53|力扣309.最佳买卖股票时机含冷冻期 、714.买卖股票的最佳时机含手续费、总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1044085

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W