代码随想录算法训练营第四十九天【动态规划part10】 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

121. 买卖股票的最佳时机

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

求解思路:

动规五部曲

  1. 确定dp数组及其下标含义:使用一个二维数组dp[i][2],dp[i][0]代表持有股票的最大收益,dp[i][1]代表不持有股票的最大收益;注意“持有”不代表当天买入,可能是之前的某一天就买入了,“不持有”同理
  2. 确定递推公式:如果当天持有股票,则股票可能是之前就买好了,或者是当天买的,递推公式取两者较大值,即dp[i][0] = max(dp[i - 1][0], -prices[i]);如果当天不持有股票,则股票可能是之前就卖出了,也可能是当天才卖出,取两者较大值,即dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);
  3. dp数组的初始化:dp[0][0]表示第0天持有股票,dp[0][0] -= prices[0];dp[0][1]表示第0天不持有股票,dp[0][1] = 0
  4. 确定遍历顺序:从前向后
  5. 举例推导dp数组:以[7,1,5,3,6,4]为例,dp数组状态如下

代码:

class Solution {
public:int maxProfit(vector<int>& prices) {if (prices.size() == 0) return 0;vector<vector<int>> dp(prices.size(),vector<int>(2));// 0为当天持有该股票,1为当天不持有dp[0][0] = -1 * prices[0];dp[0][1] = 0;for (int i = 1; i < prices.size(); i++){// 当天持有股票,可能是之前买的,可能是今天买的dp[i][0] = max(dp[i-1][0], -1 * prices[i]);// 当天未持有股票,可能是之前卖了,也可能是今天卖了dp[i][1] = max(dp[i-1][1], prices[i] + dp[i-1][0]);}return dp[prices.size()-1][1];}
};

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

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

求解思路:

和前一题唯一不一样的地方在于当天持有股票的所得金额,即dp[i][0]的递推公式

如果第i天持有股票即dp[i][0], 那么可以由两个状态推出来:第i-1天就持有股票,则保持现状,即dp[i][0] = dp[i-1][0];第i天买入股票,则所得现金为昨天不持有股票的现金减去今天的股票价格,即 dp[i - 1][1] - prices[i]

代码:

class Solution {
public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(), vector<int>(2,0));dp[0][0] = -prices[0];dp[0][1] = 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]);}return dp[prices.size()-1][1];}
};

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

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

相关文章

ZYNQ_project:IIC_EEPROM

EEPROM简介&#xff1a; EEPROM(Electrically Erasable Progammable Read Only Memory&#xff0c; E2PROM)是指带电可擦可编程只读存储器&#xff0c;是一种常用的非易失性存储器&#xff08;掉电数据不丢失&#xff09;&#xff0c; E2PROM 有多种类型的产品&#xff0c;我们…

深入理解强化学习——马尔可夫决策过程:备份图(Backup Diagram)

分类目录&#xff1a;《深入理解强化学习》总目录 在本文中&#xff0c;我们将介绍备份&#xff08;Backup&#xff09;的概念。备份类似于自举之间的迭代关系&#xff0c;对于某一个状态&#xff0c;它的当前价值是与它的未来价值线性相关的。 我们将与下图类似的图称为备份图…

allure修改logo 自定义

无论pytest还是httprunner都适用allure生成报告。那我们就有必要对allure报告进行一些定制。我们先修改logo&#xff1a; 1、给allure.yml插件custom-logo-plugin 找到allure安装的位置&#xff0c;在config文件夹下有一个allure.yml的配置文件。打开它&#xff0c;在最后添加…

Python NeuralProphet库: 高效时间序列预测的利器

更多Python学习内容&#xff1a;ipengtao.com 时间序列数据在许多领域中都扮演着关键的角色&#xff0c;从股票价格到气象数据。为了更准确地预测未来趋势&#xff0c;机器学习领域涌现出许多时间序列预测的方法和工具。其中&#xff0c;NeuralProphet库是一个强大的工具&#…

可信区块链运行监测服务平台(TBM)发展研讨会在北京召开

2023年11月23日&#xff0c;由中国信息通信研究院、中国移动通信集团设计院有限公司、区块链服务网络&#xff08;BSN&#xff09;发展联盟共同主办的“可信区块链运行监测服务平台&#xff08;TBM&#xff09;发展研讨会”在北京成功举行。会议围绕区块链的监测与治理&#xf…

【AIGC】关于Prompt你必须知道的特性

代码和数据:https://github.com/tonyzhaozh/few-shot-learning 一、实践验证的大模型的特性 1. 大模型的偏差 示例&#xff1a;&#xff08;文本的情感分析&#xff1a;一句话->P(积极&#xff09;或者N&#xff08;消极) Input: I hate this movie. Sentiment: Negativ…

JVM GC算法

一, 垃圾回收分类: 按线程数分&#xff0c;可以分为串行垃圾回收器和并行垃圾回收器。 按工作模式分&#xff0c;可以分为并发垃圾回收器和独占式垃圾回收器 按碎片处理方式分&#xff0c;可以分为压缩式垃圾回收器和非压缩式垃圾回收器按工作的内存区间分&#xff0c;又可分为…

GAN:GAN论文学习

论文&#xff1a;https://arxiv.org/pdf/1406.2661.pdf 发表&#xff1a;2014 一、GAN简介&#xff1a;Generative Adversarial Network GAN是由Ian Goodfellow于2014年提出&#xff0c;GAN&#xff1a;全名叫做生成对抗网络。GAN的目的就是无中生有&#xff0c;以假乱真。 …

法线制作神器crazybump 和 Normal Map Generator

UE4系列文章目录 文章目录 UE4系列文章目录前言一、crazybump是什么&#xff1f;二、Normal Map Generator是什么&#xff1f; 前言 我们在使用UE4、UE5制作材质时&#xff0c;经常会遇到使用法线图。使用深度图生成法线图&#xff0c;一般会使用photoShop等软件&#xff0c;对…

untiy 配置iis服务器来打开webgl

最简单的方法是不需要配置服务器&#xff0c;打包的时候直接build and run&#xff0c;但是有时候如果我们需要调整js的内容&#xff0c;会很不方便&#xff0c;所以配置一个iis服务器还是很有必要的 首先要开启iis服务 控制面板&#xff0c;查看方式选类型&#xff0c;点击程…

【0基础学Java第七课】-- 类和对象01

7. 类和对象 7.1 面向对象的初步认知7.1.1 什么是面向对象7.1.2 面向对象与面向过程 7.2 类定义和使用7.2.1 简单认识类7.2.2 类的定义格式7.2.3 定义一个狗类7.2.4 定义一个学生类 7.3 类的实例化7.3.1 什么是实列化7.3.2 引用只能指向对象&#xff0c;且不能同时指向多个对象…

孩子写作业用的护眼灯哪种好?适合考研的护眼台灯推荐

随着现在小孩子的近视率越来越高&#xff0c;全国中小学生近视比率占大多数&#xff0c;许多家长也开始为孩子的健康成长而担忧&#xff0c;这时很多家长就会选择护眼台灯来为孩子保驾护航。但面对市面上五花八门的台灯品牌&#xff0c;各式各样的台灯许多家长却乱了阵脚&#…