【Day53】代码随想录之动态规划_买卖股票ⅠⅡ

文章目录

      • 动态规划理论基础
        • 动规五部曲:
        • 出现结果不正确:
      • 1. 买卖股票的最佳时机
      • 2. 买卖股票的最佳时机Ⅱ

动态规划理论基础

动规五部曲:
  1. 确定dp数组 下标及dp[i] 的含义。
  2. 递推公式:比如斐波那契数列 dp[i] = dp[i-1] + dp[i-2]。
  3. 初始化dp数组。
  4. 确定遍历顺序:从前到后or其他。
  5. 打印。
出现结果不正确:
  1. 打印dp日志和自己想的一样:递推公式、初始化或者遍历顺序出错。
  2. 打印dp日志和自己想的不一样:代码实现细节出现问题。

1. 买卖股票的最佳时机

参考文档:代码随想录

分析:
买卖只有一次
dp五部曲:

  1. dp[i]含义:dp[i][0]表示持有i手里的现金,dp[i][1]表示不持有i手里的现金。
  2. 递推公式:dp[i][0] = max(dp[i-1][0], 0 - prices[i]); dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i]);
  3. 初始化:dp[0][0] = -prices[0]; dp[0][1] = 0;
  4. 遍历顺序:从小到大。

代码:

class Solution {
public:int maxProfit(vector<int>& prices) {//dp[i][0]:持有i股手里的钱//dp[i][1]:不持有i股手里的钱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][0] = max(dp[i-1][0], -prices[i]);dp[i][1] = max(dp[i-1][1], dp[i-1][0]+prices[i]);}return max(dp[prices.size()-1][0], dp[prices.size()-1][1]);}
};

2. 买卖股票的最佳时机Ⅱ

参考文档:代码随想录

分析:
买卖次数是不限的,之前有用贪心做过,这次用动态规划。
dp五部曲:

  1. dp[i]含义:dp[i][0]表示持有i手里的现金,dp[i][1]表示不持有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. 初始化:dp[0][0] = -prices[0]; dp[0][1] = 0;
  4. 遍历顺序:从小到大。

代码:

class Solution {
public:int maxProfit(vector<int>& prices) {//dp[i][0]:i股持有手里的现金,i-1股也持有,i-1股不持有i股重新买入(设计多次买入和一次手中只有一股股票)//dp[i][1]:i股不持有手里的现金:i-1股也不持有,现金不变,i-1股持有i不持有卖出i-1买入i股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]);//i-1股持有,i股不持有,i股抛出,收益prices[i], dp[i-1][0]+prices[i]dp[i][1] = max(dp[i-1][1], dp[i-1][0]+prices[i]);}return max(dp[prices.size()-1][0], dp[prices.size()-1][1]);}
};

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

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

相关文章

学习git分支

学习git分支 [网页练习](Learn Git Branching) 基础篇 git commit Git 仓库中的提交记录保存的是你的目录下所有文件的快照&#xff0c;就像是把整个目录复制&#xff0c;然后再粘贴一样&#xff0c;但比复制粘贴优雅许多&#xff01;Git 希望提交记录尽可能地轻量&#xf…

【GStreamer】GstElement详解:GStreamer 中最重要的对象

1、什么是元素GstElement? 每个解码器、编码器、解复用器、视频或音频输出实际上都是一个GstElement。GstElement可以视为一个黑盒子:例如,对于解码器元素,输入为已编码数据,输出为解码后的数据,解码过程已由GstElement封装好。 2、都有哪些元素GstElement? 2.1 源点…

概率基础——几何分布

概率基础——几何分布 介绍 在统计学中&#xff0c;几何分布是描述了在一系列独立同分布的伯努利试验中&#xff0c;第一次成功所需的试验次数的概率分布。在连续抛掷硬币的试验中&#xff0c;每次抛掷结果为正面向上的概率为 p p p&#xff0c;反面向上的概率为 1 − p 1-p …

ZCC3221 输入高耐压 1A 线性锂电池充电管理芯片(替代CE3221)

特性 :W 内置支持高压输入电流可调节的线性充电器&#xff1a; ■ 最高输入 24V 耐压&#xff0c;可承受高达 30V 的浪涌电压 ■ 恒流下最大充电电流可达 1A&#xff0c;支持外部电阻实时配置充电电流 ■ 兼容 5VUSB 功率源和 AC 适配器&#xff0c;并提供热插拔保护 ■…

GB/T 43565-2023 中小学合成材料面层篮球场地检测

合成材料面层是指铺装在沥青混凝土或水泥混凝土等基础层上的高分子合成材料层&#xff0c;按照使用功能分为田径产地&#xff0c;球类场地和其他活动场地&#xff0c;按照材料形态分为现浇型面层、预制型面层和人造草面层。 GB/T 43565-2023中小学合成材料面层篮球场地检测项目…

python 验证RSA密钥生成加解密签名验签算法实现

目录 一、RSA加密、解密、签名、验签(验证签名)&RSA算法原理 1、RSA加密、签名区别: 2、对签名和验签过程详细理解: 2.1 签名过程: 2.2 验签过程: 二、1024bit RSA Key生成 三、python 实现Public_key加密,Private_key解密 四、python 实现Private_Key签名,使…

RM电控讲义【HAL库篇】

这段代码中do while的作用&#xff1a; 宏定义中的语句块&#xff1a;do { ... } while (0) 允许你在宏定义中创建一个语句块&#xff0c;从而可以包含多条语句。这在宏定义中特别有用&#xff0c;因为宏只是简单的文本替换&#xff0c;不像函数那样有作用域和返回类型。因此&…

JBOSS EPA 7.X 接入Oracle数据源

获取Oracle JDBC驱动程序&#xff1a; 访问Oracle官方网站&#xff0c;下载适用于您的操作系统和Oracle数据库版本的JDBC驱动程序文件&#xff08;通常为一个JAR文件&#xff09;。您可能需要一个Oracle账户来访问这些文件。将下载的JAR文件保存到您的计算机上。 将驱动程序文件…

WordPress后台自定义登录和管理页面插件Admin Customizer

WordPress默认的后台登录页面和管理员&#xff0c;很多站长都想去掉或修改一些自己不喜欢的功能&#xff0c;比如登录页和管理页的主题样式、后台左侧菜单栏的某些菜单、仪表盘的一些功能、后台页眉页脚某些小细节等等。这里boke112百科推荐这款可以让我们轻松自定义后台登录页…

2.20日学习打卡----初学Vue3

2.20日学习打卡 目录: 2.20日学习打卡Vue是什么&#xff1f;安装vue模板语法条件渲染列表渲染事件处理表单输入绑定组件基础Props组件交互自定义事件组件交互组件生命周期Vue引入第三方Axios网络请求Axios网络请求封装网络请求跨域解决方案路由配置路由传递参数嵌套路由配置Vue…

js设计模式:单例模式

作用: 保证一个类只有一个实例,并且提供一个全局的访问位置。 可以用来实现全局的一些状态管理或者独一无二的数据 示例: class Wjt{constructor(name,idNumber,gender){this.name namethis.idNumber idNumberthis.gender gender}//可以直接使用Wjt调用的静态方法static …

性能测试概述

1.性能测试介绍 好处: 有效的性能测试能给研发、运维团队提供有效的容量规划能力、系统风险识别、系统瓶颈识别、性能调优指导,保障尽量避免这些问题的发生。 例如: 假设:以下场景,不可用10分钟,带来的经济损失 天猫双十一峰值处理订单58.3万笔每秒 京东金融618战报…

Linux Driver | 设备树开发之初识设备树

Linux Driver | 设备树开发之初识设备树 时间:2024年2月22日20:35:13 文章目录 **Linux Driver** | 设备树开发之初识设备树参考1.设备树开发2.`Linux`设备树的由来3.`Linux`设备树的由来-为什么会有设备树4.设备树的由来5.快速编译设备树---**DTC** (`device tree compiler`)…

C#,入门教程(29)——修饰词静态(static)的用法详解

上一篇&#xff1a; C#&#xff0c;入门教程(28)——文件夹&#xff08;目录&#xff09;、文件读&#xff08;Read&#xff09;与写&#xff08;Write&#xff09;的基础知识https://blog.csdn.net/beijinghorn/article/details/124231282 static 是编程高频词之一。 读了一…

2.21号qt

1.QMainWindow中常用的类 继承于QMainWindow类&#xff0c;原因该类提供了QWidget没有提供的成员函数。 菜单栏、工具栏、状态栏、浮动窗口&#xff08;铆接部件&#xff09;、核心部件 1.1 菜单栏 QMenuBar //创建菜单栏 QMenuBar 最多只能有一个 QMenuBar *mbar menu…

Hutool简介和常用类

Hutool简介 Hutool是一个小而全的Java工具类库&#xff0c;通过静态方法封装&#xff0c;降低相关API的学习成本&#xff0c;提高工作效率&#xff0c;使Java拥有函数式语言般的优雅&#xff0c;让Java语言也可以“甜甜的”。 Hutool中的工具方法来自每个用户的精雕细琢&…

【鸿蒙 HarmonyOS 4.0】数据持久化

一、数据持久化介绍 数据持久化是将内存数据(内存是临时的存储空间)&#xff0c;通过文件或数据库的形式保存在设备中。 HarmonyOS提供两种数据持久化方案&#xff1a; 1.1、用户首选项&#xff08;Preferences&#xff09;&#xff1a; 通常用于保存应用的配置信息。数据通…

android 全局异常处理封装

app出现了问题&#xff0c;尤其是多线程问题&#xff0c;某个线程出了问题&#xff0c;很不好找&#xff0c;那是不是可以搞一个统一的处理类&#xff0c;将所有的异常信息都统一到一个地方呢&#xff0c;原本只是一个知识点&#xff0c;但我发现这里还可以 保存异常信息到本地…

Vue 进阶系列丨实现简易reactive和ref

Vue 进阶系列教程将在本号持续发布&#xff0c;一起查漏补缺学个痛快&#xff01;若您有遇到其它相关问题&#xff0c;非常欢迎在评论中留言讨论&#xff0c;达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧&#xff01; 2013年7月28日&#xff0c;尤雨溪第一次在 GItHu…

计算机网络Day02--物理层(一)

计算机网络Day02–物理层 物理层基本概念 物理层考虑的是怎么才能在连接各种计算机的传输媒体上传输比特流&#xff0c;而不是具体的传输媒体 作用&#xff1a;尽可能屏蔽掉不同传输媒体和通信手段的差异 用于物流层的协议也称为物流层规程 主要作用&#xff1a;解决计算机…