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

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

代码随想录算法训练营第五十三天

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

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

class Solution {
public:int maxProfit(vector<int>& prices) {vector<vector<int>>dp(prices.size(),vector<int>(4,0));dp[0][0] = 0;//不操作dp[0][1] = -prices[0];//持有dp[0][2] = 0;//不持有dp[0][3] = 0;//冷冻期for(int i =1;i<prices.size();i++){dp[i][0] = 0;dp[i][1] = max(dp[i-1][1],dp[i-1][3]-prices[i]);dp[i][2] = max(dp[i-1][2],dp[i-1][1]+prices[i]);dp[i][3] = dp[i-1][2];}return dp[prices.size()-1][2];}
};

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

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

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

总结

买卖股票的dp数组dp[i][j],i是第i天的价格,有j是状态,根据题目需要分为持有,不持有,第k次持有,第k次卖出后(买入前),冷却期等。需要了解当前状态可能是由前一天的哪种状态转变过来的。

  1. 买卖一次:
    不持有=保持前一天的不持有或当天卖出

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

    持有=保持前一天的持有或者当天买入

    dp[i][1] = max(dp[i-1][1],0-prices[i]);
    
  2. 买卖多次:
    不持有=保持前一天的不持有或当天卖出

    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]);
    
  3. 只能买卖2次:
    不操作:

    dp[i][0] = 0;
    

    第一次持有=保持之前持有或当天买入

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

    第一次不持有=保持之前不持有或当前卖出

    dp[i][2] = max(dp[i-1][2],dp[i-1][1]+prices[i]);
    

    第二次持有=保持之前持有或者当天买入

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

    第二次不持有=保持之前持有或者当天卖出

    dp[i][4] = max(dp[i-1][4],dp[i-1][3]+prices[i]);
    
  4. 只能买卖k次:
    总共状态有2k种,第k次持有或第k次不持有

     if (j % 2 == 1) //奇数持有dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1] - prices[i]);else  //偶数不持有dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1] + prices[i]);
    
  5. 含冷冻期:
    不操作:

    dp[i][0] = 0;
    

    持有:

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

    不持有:

    dp[i][2] = max(dp[i-1][2],dp[i-1][1]+prices[i]);
    

    冷冻期:

    dp[i][3] = dp[i-1][2];
    
  6. 含手续费:
    状态和2相同,卖出时多减一份手续费即可
    持有:

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

    不持有:

    dp[i][2] = max(dp[i-1][2],dp[i-1][1]+prices[i]-fee);           
    

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



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

相关文章

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

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十