代码随想录算法训练营第四十六天 | 买卖股票的最佳时机

news/2024/7/7 8:20:56/文章来源:https://www.cnblogs.com/cscpp/p/18282084

121.买卖股票的最佳时机

题目链接 文章讲解 视频讲解

动规五部曲:

  • dp[j][0]: 表示持有股票的最大现金,dp[j][1]表示不持有股票的最大现金
  • 递推公式:
    • 第j天持有股票的最大现金为:之前就持有这只股票和今天持有这只股票取最大值:
      dp[j][0] = max(dp[j-1][0], -prices[j]);
    • 第j天不持有股票的最大现金为:之前就已经不持有和今天卖出这只股票取最大值:
      dp[j][1] = max(dp[j-1][1], dp[j-1][0] + prices[j])
  • 初始化:第j天是否持有股票的最大值只取决于前一天是否持有股票,所以只需初始化第0天
    dp[0][0] = -prices[0]
    dp[0][1] = 0;
  • 遍历顺序:从前向后遍历
  • 打印dp数组
class Solution {
public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(), vector<int>(2));dp[0][0] = -prices[0];dp[0][1] = 0;for(int j = 1; j < prices.size(); ++j) {dp[j][0] = max(dp[j-1][0], -prices[j]);dp[j][1] = max(dp[j-1][1], dp[j-1][0] + prices[j]);}return dp[prices.size() - 1][1];}
};

122.买卖股票的最佳时机II

题目链接 文章讲解 视频讲解

思路:因为股票可以买入多次所以:当天持有股票dp[j][0]为前一天就持有股票和前一天不持有股票+今天才买入股票取最大值(如果只可以买入一次股票,那么初始现金一直都是0,所以买入股票后现金为-prices[j],而现在的初始现金为dp[j-1][1]-prices[j]) 递推公式为:dp[j][0] = max(dp[j-1][0], dp[j-1][1]-prices[j]);
dp[j][1]:仍然是max(dp[j-1][1], dp[j-1][0]+prices-[j])

class Solution {
public:int maxProfit(vector<int>& prices) {// dp[j][0] 表示持有股票的最大价值,dp[j][1]表示不持有股票的最大价值vector<vector<int>> dp(prices.size(), vector<int>(2));// 递推公式: dp[j][0] = max(dp[j-1][0], dp[j-1][1]-prices[j]);// dp[j][1] = max(dp[j-1][1], dp[j-1][0] + prices[j]);// 初始化dp[0][0] = -prices[0];dp[0][1] = 0;for(int j = 1; j < prices.size(); ++j) {dp[j][0] = max(dp[j-1][0], dp[j-1][1]-prices[j]);dp[j][1] = max(dp[j-1][1], dp[j-1][0] + prices[j]);}for(auto vec : dp) {for(int val : vec) {cout << val << " ";}cout << endl;}return dp[prices.size() - 1][1];}
};

123.买卖股票的最佳时机

题目链接 文章讲解 视频讲解

动规五部曲:

  • dp数组含义:
    • dp[j][0]: 不做任何操作
    • dp[j][1]: 第一次持有股票的最大现金
    • dp[j][2]: 第一次不持有股票
    • dp[j][3]: 第二次持有股票
    • dp[j][4]: 第二次不持有股票
  • 递推公式:
    • dp[j][0] = dp[j-1][0]; 不做任何操作手中的现金始终为0
    • dp[j][1] = max(dp[j-1][1], dp[j-1][0] - prices[j]);
    • dp[j][2] = max(dp[j-1][2], dp[j-1][1] + prices[j]);
    • dp[j][3] = max(dp[j-1][3], dp[j-1][2] - prices[j]);
    • dp[j][4] = max(dp[j-1][4], dp[j-1][3] + prices[j]);
  • 初始化:
    • dp[0][0] = 0;
    • dp[0][1] = -prices[0];
    • dp[0][2] = 0; // 第一天买入第一天卖出;
    • dp[0][3] = -prices[0]; // 第一天卖出之后再买入
    • dp[0][4] = 0; // 再次买入后再次卖出
  • 遍历顺序:从小到大遍历
  • 打印dp数组
class Solution {
public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(), vector<int>(5));dp[0][0] = 0;dp[0][1] = -prices[0]; // 第一次持有dp[0][2] = 0; // 第一次不持有dp[0][3] = -prices[0]; // 第二次持有dp[0][4] = 0; // 第二次不持有for(int j = 1; j < prices.size(); ++j) {dp[j][0] = dp[j-1][0];dp[j][1] = max(dp[j-1][1], dp[j-1][0] - prices[j]);dp[j][2] = max(dp[j-1][2], dp[j-1][1] + prices[j]);dp[j][3] = max(dp[j-1][3], dp[j-1][2] - prices[j]);dp[j][4] = max(dp[j-1][4], dp[j-1][3] + prices[j]);}// return max(dp[0][0], dp[prices.size() - 1][4]);return dp[prices.size() - 1][4];}
};

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asp.Net Core -Authorizationz授权

授权的内部实现参考 动态授权参考动态授权 基于权限的授权 1.定义权限-Permissionspublic class Permissions{public const string Admin = "Admin";public const string Users = "Users";public const string UserCreate = Users+ ".Create";pu…

结对项目

命令行参数处理: 使用 argparse 或者 sys 模块处理命令行参数,以接收用户输入的题目数量和题目范围(例如最大数值)。 生成四则运算题目: 随机生成题目,每个题目包括两个操作数和一个运算符。 控制生成的题目数量和数值范围,确保生成的题目符合小学生的学习要求(比如操作…

详解微服务应用灰度发布最佳实践

本次分享是站在 DevOps 视角的灰度发布实践概述,主要内容包括以下四个方面:第一,灰度发布要解决的问题;第二,灰度发布的四种典型场景;第三,如何把灰度发布融入到应用的研发流程中,即把灰度发布与 DevOps 工作融合;第四,对于外部流量灰度场景,演示如何通过工具将其落…

OpenBMB Hugging Face THUNLP,联袂献上经典大模型课

这个夏天,THUNLP 携手 Hugging Face 和 OpenBMB,推出 大模型公开课第二季。在大模型公开课第二季中,将有全球知名开源社区 OpenBMB X Hugging Face 梦幻联动;MiniCPM、ChatDev、Ultra对齐 等明星开源项目作者亲自授课,带领同学从深度学习开始快速了解大模型的相关理论并进…

nginx开启https

生成自签名证书 如果是在运营商处获得的证书,则不用这一步点击查看代码 mkdir /etc/nginx/ssl cat > /etc/nginx/ssl/nginx.cnf <<EOF [ req ] default_bits = 2048 distinguished_name = req_distinguished_name req_extensions = req_ext x509_extension…

(三)JS逆向——爬取易车网

爬取易车网的车辆配置信息 所以主要就是确定这几个是怎么生成的 搜索x-sign值的位置,打断点,找到构建x-sign的函数 注意,一定要看清是否是正确的url,x-timestamp明显是时间戳 进入这个函数 x-sign值,是对这个字符串做md5,这个字符串由三部分构成,参数、时间戳、和一个固…

.Net知识技能大全

.Net知识技能大全 更多请见https://www.dotnetshare.com C#常见运算符一元运算符(+、-、!、~、++、--) 算术运算符(*、/、%、+、 – ) 移位运算符(<< 、>> ) 关系和类型测试运算符(==、!=、<、>、<=、>=、is 和 as) 逻辑运算符(&、^ 和 |…

Hello World with solidity

1. Solidity 是什么? Solidity 是一种面向对象的、静态类型的编程语言,专为在以太坊上编写智能合约而创建。由于以太坊上的智能合约可以处理真实世界的资产(比如加密货币),所以Solidity的设计非常关注安全性。 以下是 Solidity 的一些主要特点:类型安全和静态类型:这可以…

如何从Salesforce顾问转型为解决方案架构师?

在充满活力的Salesforce咨询领域,许多专业人士都希望从顾问转型为解决方案架构师。这种转型不仅需要掌握新技能,还需要从根本上改变思维方式。关键在于摆脱顾问典型的以职能为中心的思维模式,拥抱更广阔、更具战略性的视角。 从“如何”到“为什么” 当我们开始问“为什么”…

Modbus转Profibus主站网关连接温控表通讯技术

Modbus转ProfibusDP主站网关(XD-MDPBM20)是实现不同通讯协议设备之间联系的重要组件。本文将介绍Modbus转ProfibusDP主站网关(XD-MDPBM20)连接温控表实现高效通讯,涉及设备准备、协议介绍、配置步骤、测试通讯及注意事项。此技术可帮助实时监测温度并调节控制,提高生产效…

加解密技术原理

加解密技术概览 加解密定义 加密:数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,通过这样的途径来达到保护数据不被非法人员窃取、阅读的目的。解密:数据解密的过程就是对密文使用相应的算法和密钥进行解…

Jmeter使用CLI模式进行负载测试的注意点

在我们打开Jmeter的时候,窗口会出现如下提示:这个提示的意思是, 不要使用 GUI 模式进行负载测试:GUI 模式主要用于创建和调试测试,而不是运行大规模的负载测试。 ​使用 CLI 模式进行负载测试:CLI 模式(以前称为 NON GUI 模式)更适合进行负载测试,因为它能够更高效地使…

Golang面试:泛型

Go语言在1.18版本中引入了泛型(Generics),这是Go语言发展中的一个重要里程碑。泛型允许你编写更通用和可复用的代码,而无需牺牲类型安全性。以下是对Go中泛型的详细介绍,包括其语法、使用场景和示例代码。 1. 泛型的基本概念 泛型允许你定义可以处理多种数据类型的函数和数…

【算法】KD-tree

1. 算法简介 KD-tree(K-Dimensional),是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。 主要应用于多维空间关键数据的搜索。 KD-tree 的本质是一棵平衡树,将空间内的区域划分为一个超长方体,然后存储为节点进行维护。 以下为一个 \(k=2\) 时的 KD…

性能测试:主流性能监控工具介绍

行业流行性能监控工具有哪些Linux 自带命令 Vmstat,Top 等 Nmon Collectd + InfluxDB + Grafana Prometheus + Grafana行业流行性能监控工具的介绍 Linux 自带命令 Vmstat,Top 等 vmstat 和 top 都是 Linux 系统自带的命令,提供了实时的监控信息,对于系统管理员和开发人员来…

BTC交易流程

交易流程 比特币的交易流程涉及多个步骤和参与方,包括发送方、接收方、矿工和比特币网络中的节点。以下是比特币交易的详细流程:创建交易:生成比特币地址:比特币地址是一个由公钥生成的字符串,用于接收比特币。每个用户在创建比特币钱包时,都会生成一对公钥和私钥。公钥通…

技术手段和测试流程,不是一回事

看到这样一个问题:造测试数据时,如果失败了怎么办,如何处理这种失败的情况?失败了需要停止测试活动吗? 很久没看到这么有意思的问题了,毕竟测试数据是很重要的测试活动开展资料,如果缺失或者不准确,会对测试结果造成极大的影响。那么该如何理解和解决上述的问题呢?我们…

PaddleNLP UIE -- 药品说明书信息抽取(名称、规格、用法、用量)

目录创建项目环境配置上传代码训练定制代码结构数据标注准备语料库数据标注导出数据数据转换doccanoLabel Studio模型微调模型评估定制模型一键预测效果 PaddleNLP UIE 实体关系抽取 -- 抽取药品说明书(名称、规格、用法、用量) 对于细分场景推荐使用轻定制功能(标注少量数据…

VMware vSphere Tanzu部署_03_vCenter部署

vCenter部署 部署vCenter通过安装ISO内的webui工具进行vCenter虚机部署配置部署位置为ESXI机器配置部署规格为tiny模式配置vcsa部署的磁盘类型为精简模式配置vcsa的网络初始化vCenter配置vcsa开启ntp同步和开启SSH登录配置vsphere登录账号和登录域调整vCenter内存大小在esxi中将…

05-Excel初阶操作-学习笔记

本期继续更新函数专题DATE函数 函数格式:DATE(参数1,参数2,参数3) 参数说明:参数1:年份;参数2:月份;参数3:日 作用:将文本类型转换为正确的日期格式 应用场景:身份证号提取出生日期其中,MID()是文本截取函数 注意!如果输入2000-2-30使用date函数后会进行进位显示2000…