C++ day51 买卖股票最佳时期

题目1:309 买卖股票的最佳时机含冷冻期

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

对题目的理解

prices[i]表示第i天股票的价格,尽可能多地完成更多的交易,不能同时进行多笔交易,卖出股票后,第二天无法买入股票(冷冻期是1天),计算最大利润

动态规划

动规五部曲

1)dp数组及下标i的含义

状态1:dp[i][0] 第i天持有股票的状态最大现金

状态2:dp[i][1] 第i天保持股票卖出的状态,冷冻期之后最大现金

状态3:dp[i][2] 第i天具体卖出股票的状态,冷冻期的前一天最大现金

状态4:dp[i][3] 第i天冷冻期的状态最大现金

最终求解:dp[prices.size()-1][1] dp[prices.size()-1][2]  dp[prices.size()-1][3]的

2)递推公式

dp[i][0] = dp[i-1][0] 前一天持有股票

买入股票:前一天是冷冻期;前一天保持卖出股票状态

dp[i][0] = dp[i-1][3]-prices[i]

dp[i][0] = 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])

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-1][0]+prices[i]  前一天是持有股票的状态

dp[i][3] = dp[i-1][2]  前一天是具体卖出股票的状态

3)dp数组初始化

dp[0][0]=-prices[0]

dp[0][1]的状态是一个非法状态,看递推公式中需要初始化为多少,dp[1][0]=dp[0][1]-prices[1],所以将dp[0][1]初始化成0(当天买当天卖)

dp[1][0] = dp[0][3]-prices[1]  所以将dp[0][3]初始化为0

同理将dp[0][2]初始化为0

4)遍历顺序

根据递推公式,dp[i] 依赖于 dp[i-1],从小到大遍历

5)打印dp数组

代码

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //定义dp数组
        vector<vector<int>> dp(prices.size(),vector<int>(4,0));
        //初始化dp数组
        dp[0][0] = -prices[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[prices.size()-1][1],max(dp[prices.size()-1][2],dp[prices.size()-1][3]));
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

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

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

对题目的理解

prices[i]表示第i天的股票价格  fee代表交易股票的手续费,每笔交易都需要附手续费,可以无限次的进行交易,不能同时进行多次交易,返回利润的最大值。

动态规划

动规五部曲

1)dp数组及下标i的含义

dp[i][0]:第i天持有股票的最大现金数

dp[i][1]:第i天不持有股票的最大现金数

最后求解:dp[prices.size()-1][1]

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]-fee),不持有股票可以分为两种情况,一种是一直不持有,还有一种是前一天持有股票,那么,今天卖出,就达到了不持有的情况,同时需要减去手续费

3)dp数组初始化

根据递推公式,初始化dp[0][0]和dp[0][1],

dp[0][0]代表第i天持有股票的最大现金数,dp[1][0]=dp[0][0],那么为-prices[0]

dp[1][0]代表第i天不持有股票的最大现金数  dp[1][1]=dp[0][1]  那么第一天一定是买或者不买股票,所以不持有股票的最大现金数是0

4)遍历顺序

根据递推公式,从小到大遍历 for(i=1;i<prices.size();i++)注意i从1开始遍历

5)打印dp数组

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        //定义dp数组
        vector<vector<int>> dp(prices.size(),vector<int>(2,0));
        //初始化dp数组
        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 dp[prices.size()-1][1];
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hisat-Trinity-PASA等组学分析流程

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 详细教程请访问&#xff1a; 组学分析流程 本期分析流程 Hisat2-SamtoolsTrinity_GG_denovoPASA … 本期教程文章 题目&#xff1a;Genomic insights into local adaptation and future climate-induced vu…

C++ 基础篇

目录 C开发概述 C特点 C跨平台的原因 C编译器 C库 操作系统API C基本概念 注释 变量 常量 两种定义常量方式的区别 表示符命名规则 常见的关键字 数据类型 整型 浮点数 字符型 转义字符 字符串型 布尔类型 运算符 算术运算符 赋值运算符 比较运算符 逻…

三极管在数字电路中的应用

一、认识三极管 三极管拥有3个引脚&#xff0c;分别对应3个级&#xff1a;基极(Base)、发射极&#xff08;Emitter&#xff09;、集电极(Collector)&#xff0c;如下图所示&#xff1b;下图横向左侧的是基极&#xff0c;带箭头的那个引脚就是发射极&#xff0c;另一个就是集电…

从零开始搭建博客网站-----登陆页面

登录按钮以及背景图设置 安装element-plus和css插件 npm install element-plus --save npm install sass --save npm install sass-loader --save在main.js里引用 寻找背景图存入assets文件下&#xff0c;并且在Login.vue里设置背景图和登录按钮 设置的背景图的大小没有起…

基于ResNet18网络完成图像分类任务

目录 1 数据处理 1.1 数据集介绍 1.2 数据读取 1.3 构造Dataset类 2 模型构建 3 模型训练 4 模型评价 5 模型预测 6 什么是预训练模型和迁移学习 7 比较“使用预训练模型”和“不使用预训练模型”的效果。 总结 在本实践中&#xff0c;我们实践一个更通用的图像分类任务…

物联网开发(一)新版Onenet 基础配置

onenet新创建的账号&#xff0c;没有了多协议接入&#xff0c;只有新的物联网开放平台 第一讲&#xff0c;先给大家讲一下&#xff1a;新版Onenet 基础配置 创建产品 产品开发-->创建产品 产品的品类选择个&#xff1a;大致符合你项目的即可&#xff0c;没有影响 选择智…

构建第一个ArkTS应用(纯HarmonyOS应用)

1. 安装开发工具 在华为开发者官方上下载HarmonyOS应用专用的开发工具&#xff0c;链接地址&#xff1a;HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 要想使用开发工具让项目跑起来&#xff0c;需要10G的磁盘空间。开发工具需要的磁盘空间为2.36G&#xff1b;SDK需…

Python笔记1.2(with open() as file和open()、logging、os、shutil、glob、decode和encode)

Python笔记1.1&#xff08;字符串日期转换、argparse、sys、overwrite、eval、json.dumpsloads、os.system(cmd)、zfill、endswith、深浅拷贝&#xff09; Python笔记2&#xff08;函数参数、面向对象、装饰器、高级函数、捕获异常、dir&#xff09; Python笔记1.2 13、with …

Linux(12):磁盘配额(Quota)与进阶文件系统管理

磁盘配额&#xff08;Quota&#xff09;的应用与实作 Quota 的一般用途&#xff1a; 针对 www server &#xff0c;例如:每个人的网页空间的容量限制&#xff1b; 针对 mail server&#xff0c;例如:每个人的邮件空间限制。 针对 file server&#xff0c;例如:每个人最大的可用…

Python 爬虫 之scrapy 框架

文章目录 常用的命令开始爬虫请求与响应让控制台只输出想要的信息创建一个py 文件来帮忙运行爬虫 工作原理图实战 常用的命令 Scrapy是一个用于爬取网站数据的Python框架&#xff0c;以下是一些常用的Scrapy命令&#xff1a; 开始的时候 用 cd 进入你想创建scrapy 的文件夹 &a…

Java中各种数据类型之间的转换

低类型向高类型自动进行转换&#xff0c;高类型向低类型的准换会丢失数据&#xff0c;整数到字符类型的转换将获取对应编码的字符。 进行高精度向低精度的强制类型准换时&#xff0c;需要将想要转换成的数据类型加一个括号()。 如何完成自动转换呢&#xff1f; 转换前的数据类…

Linux 下命令行启动与关闭WebLogic的相关服务

WebLogic 的服务器类型 WebLogic提供了三种类型的服务器&#xff1a; 管理服务器节点服务器托管服务器 示例和关系如下图&#xff1a; 对应三类服务器&#xff0c; 就有三种启动和关闭的方式。本篇介绍使用命令行脚本的方式启动和关闭这三种类型的服务器。 关于WebLogic 的…

系统地自学 Python

文章目录 如何系统地自学 Python1. 选择合适的 Python 版本2. 安装 Python 和必要的工具3. 学习 Python 的基础知识4. 学习 Python 的高级特性5. Python 的应用领域6. 保持良好的学习习惯 如何系统地自学 Python Python 是一种广泛使用的编程语言&#xff0c;它具有简洁、易读、…

微服务的应用架构

架构描述的是在更高层次将应用拆分为子系统或模块的方法&#xff0c;以及这些子系统之间的交互关系。在一个基于微服务架构构建的应用中&#xff0c;每个服务都需要有自己的架构。 事实上&#xff0c;单体应用在复杂度较低时&#xff0c;它的生产效率是要高于微服务的。只有在…

【Go语言 map源码分析】

map底层数据结构 我们在之前学习C中的map时知道了 map的底层其实是有两种数据结构 这取决于我们要求它有序还是无序 如果说我们要求map是有序的它的底层数据结构就是红黑树如果说我们要求map是无序的它的底层数据结构就是哈希表 但是Go语言中的map数据结构有点特殊 如下图 …

QueryRunner报红处理

如图&#xff0c;有同学反映QueryRunner报红&#xff0c;就是没有导包 自己去找项目的地址&#xff0c;找到web文件夹下的WEB-INF 把这些jar包都粘贴进去&#xff0c;以后项目基本都会用到的&#xff0c;资源自己去找 粘贴好后打开文件的Project Structure 点击Dependencies 点…

github打不开,全网最简单解决方法,没有之一

下载watt toolkit&#xff0c; 选择‘github’&#xff0c;点击‘一键加速’&#xff0c; 具体步骤如下&#xff1a;去电脑微软商店下载watt toolkit&#xff0c;或者直接打开网址https://apps.microsoft.com/detail/9MTCFHS560NG?hlen-us&glUS 如图&#xff0c;点击安装i…

洛谷 B2006 地球人口承载力估计 C++代码

目录 前言 思路点拨 AC代码 结尾 前言 今天我们来做洛谷上的一道题目。 网址&#xff1a;地球人口承载力估计 - 洛谷 题目&#xff1a; 思路点拨 经典牛吃草问题。 解设一个人一年吃一份草。 则x*a-y*b为会多出的草&#xff0c;为什么会多呢&#xff1f;是因为每年都有…

Vue3-路由

VueRouter4路由语法解析 1.创建路由实例由createRouter实现 2.路由模式 1&#xff09;history模式使用createWebHistory()&#xff1a;地址栏不带# 2&#xff09;hash模式使用createWebHashHistory()&#xff1a;地址栏带# 3&#xff09;参数是基础路径&#xff0c;默认/ …

智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC

@[toc] 智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者…