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

|121. 买卖股票的最佳时机

文章

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

示例 1:

输入:[7,1,5,3,6,4]

输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

示例 2:

输入:prices = [7,6,4,3,1]

输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0

贪心算法可以好好琢磨一下

class Solution {
public:int maxProfit(vector<int>& prices) {int low = INT_MAX;int result = 0;for (int i = 0; i < prices.size(); i++) {low = min(low, prices[i]);  // 取最左最小价格result = max(result, prices[i] - low); // 直接取最大区间利润}return result;}
};

动态规划:
1 确定dp数组(dp table)以及下标的含义
在第i天几种可能状态:买入、卖出、之前已卖出或一直没有,之前买入
dp[i][0] 表示第i天持有股票所得最多现金:买入、之前买入、
dp[i][1] 表示第i天不持有股票所得最多现金 :卖出、之前已卖出或一直没有
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] -= prices[0]
dp[0][1] = 0
4 确定遍历顺序
前向后 先更新1后更新0

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

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

文章
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入: [7,1,5,3,6,4]

输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。

示例 2:

输入: [1,2,3,4,5]

输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

示例 3:

输入: [7,6,4,3,1]

输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

提示:

1 <= prices.length <= 3 * 10 ^ 4
0 <= prices[i] <= 10 ^ 4

已有贪心法

动态规划:
1 确定dp数组(dp table)以及下标的含义
在第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], prices[i] + dp[i - 1][0])
3 dp数组如何初始化
dp[0][0] -= prices[0]
dp[0][1] = 0
4 确定遍历顺序
前向后 最好保留

class Solution {
public:int maxProfit(vector<int>& prices) {int len = prices.size();vector<vector<int>> dp(len, vector<int>(2, 0));dp[0][0] -= prices[0];dp[0][1] = 0;for (int i = 1; i < len; i++) {dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]); // 注意这里是和121. 买卖股票的最佳时机唯一不同的地方。dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]);}return dp[len - 1][1];}
};

动态数组也可以:两个,一个用来记录,一个用来更新

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

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

相关文章

sqllab第三关通关笔记

知识点&#xff1a; 通过回显的信息判断原始语句的组成猜测该语句为 select 1,2,3 from 表名 where id (输入) limit 0,1 首先通过测试判断存在什么类型的sql注入 构造id1/0 发现正常输出&#xff1b;说明是字符型的sql注入 好了&#xff0c;下面就测试有什么限制条件 构造…

AI视频矩阵混剪系统|罐头鱼AI批量混剪定时发送

AI视频矩阵混剪系统&#xff1a;智能创作与发布的完美结合 随着社交媒体平台的快速发展&#xff0c;视频已成为各行业推广和传播的热门方式。然而&#xff0c;对于许多人来说&#xff0c;制作高质量的视频仍然是一项挑战。Q:290615413但现在&#xff0c;有了AI视频矩阵混剪系统…

吴恩达深度学习笔记:神经网络的编程基础2.5-2.8

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第二周&#xff1a;神经网络的编程基础 (Basics of Neural Network programming)2.5 导数&#xff08;Derivatives&#xff09;2.6 更多的导数例子&#xff08;More Derivative Examples&…

提升自己最快的方式:《反本能》

今天我们会谈到提升自己最快的方式:“《反本能》”。学者李敖在北大演讲时曾说:“人要实现自由,必须反求诸己,对抗掉自己的本能。”从心所欲,任性而为,人只会被生存惯性牵着鼻子走。只有对抗住本性的诱惑,才不至于沦为自我的奴隶。专栏作家卫蓝就在著作《反本能》中详尽…

前端项目构建过程中的思考落地以及拓展

1统一通用解决方案 1.1主题样式变量色系 root 全局css变量 主题颜色 黑夜白天 或者其他 (pc,app) 1.2图表色系 基础组件 业务组件(pc,app) 大屏后台不同色系 1.3 多入口配置开发 比如 把 大屏 后台混合的 做区分配置(pc,app) 1.4 整体布局 头部菜单 搜索用户 ,菜单导航 ,右边的…

乐观锁与悲观锁

乐观锁和悲观锁是处理数据库并发操作的两种不同策略 乐观锁&#xff1a; 乐观锁的核心思想是“乐观”&#xff0c;它假设在数据处理过程中&#xff0c;冲突发生的概率较低。因此&#xff0c;乐观锁不会在事务开始时就锁定数据&#xff0c;而是在数据提交时检查是否有其他事务…

第二十章 构建和配置 Nginx (UNIX® Linux macOS)

文章目录 第二十章 构建和配置 Nginx (UNIX Linux macOS)Assumptions安装为CSP构建Nginx Web服务器 第二十章 构建和配置 Nginx (UNIX Linux macOS) 本页介绍如何构建和配置 Nginx Web 服务器&#xff0c;以便与 UNIX、Linux 或 macOS 上的 InterSystems Web Gateway 一起使用…

pta-分寝室

目录 输入格式&#xff1a; 输出格式&#xff1a; 输入样例 1&#xff1a; 输出样例 1&#xff1a; 输入样例 2&#xff1a; 输出样例 2&#xff1a; 思路 学校新建了宿舍楼&#xff0c;共有 n 间寝室。等待分配的学生中&#xff0c;有女生 n0​ 位、男生 n1​ 位。所有待…

Android Framework 之 Python

当然可以&#xff0c;我会尽量提供更详细的内容&#xff0c;并增加更多的例子和解释。以下是更详细的Python语言教程&#xff1a; Python语言教程 一、Python简介 Python是一种高级编程语言&#xff0c;由Guido van Rossum于1989年底发明&#xff0c;第一个公开发行版发行于…

【快捷部署】002_Flink(1.17.2)

&#x1f4e3;【快捷部署系列】002期信息 编号选型版本操作系统部署形式部署模式002Flink1.17.2CentOS 7.Xtgz包单机 &#x1f449; 演示视频 Flink一键安装&#xff08;本地模式&#xff09; install-flink.sh 脚本内容 #!/bin/bash ####变量 ###执行脚本的当前目录 mydir$…

【linux】搜索所有目录和子目录下的包含.git的文件并删除

一、linux命令搜索所有目录和子目录下的包含.git的文件 在Linux系统中&#xff0c;要搜索所有目录和子目录下的包含.git的文件&#xff0c;可以使用find命令。find命令允许指定路径、表达式和操作来查找文件。 以下是使用find命令搜索包含.git的文件的方法&#xff1a; 1. 基…

权衡后台数据库设计中是否使用外键

目录 引言 外键简介 对比 真实后台项目中的权衡 结论 引言 在大学学习数据库课程时&#xff0c;我们会早早的接触到外键这一概念&#xff0c;同时我相信大部分人在懂了外键的概念后都会觉得外键很重要&#xff0c;在涉及多表一定要用&#xff0c;但后来在我接触到真实项目…

oracle基础-子查询 备份

一、什么是子查询 子查询是在SQL语句内的另外一条select语句&#xff0c;也被称为内查询活着内select语句。在select、insert、update、delete命令中允许是一个表达式的地方都可以包含子查询&#xff0c;子查询也可以包含在另一个子查询中。 【例1.1】在Scott模式下&#xff0…

Vue生成Canvas二维码

npm install qrcode在Vue组件中引入QRCode库&#xff1a;import QRCode from qrcode;在Vue组件的methods中创建一个方法来生成二维码&#xff1a; generateQRCode() {const canvas this.$refs.qrCodeCanvas; // 获取canvas DOM元素的引用const text Hello, World!; // 要生成…

JVM理解学习

参考视频 运行时数据区 JVM架构总览图 绿色的&#xff1a;方法区&#xff0c;堆&#xff0c;是所有线程共享的 黄色的&#xff1a; 虚拟机栈&#xff0c;本地方法栈&#xff0c;程序计数器&#xff0c;是线程私有的 程序计数器 程序计数器是一块较小的内存空间&#xff0c;物…

SpringBoot(异常处理)

SpringBoot&#xff08;异常处理&#xff09; 1.基本介绍 2.debug异常处理机制 1.找到 DefaultErrorViewResolver 2.下断点 3.debug启动&#xff0c;浏览器输出一个不存在的页面 4.第一次查找 error/404 1.查看目前要找的视图名 2.准备去查找资源 3.准备从四个默认存放静态资…

AcWing.505 火柴排队(离散化逆序对)

题目 涵涵有两盒火柴&#xff0c;每盒装有 n  根火柴&#xff0c;每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列&#xff0c;同一列火柴的高度互不相同&#xff0c;两列火柴之间的距离定义为&#xff1a; ∑i1n(ai−bi)2 其中 ai表示第一列火柴中第 i个火柴的…

[COCI2016-2017#2] Prosječni 解题记录

[COCI2016-2017#2] Prosječni 解题记录 题意简述 构造一个 n n n \times n nn 的矩阵&#xff0c;使得每一行/列的平均都在这一行/列当中&#xff0c;并且矩阵内各个数字不相同。 题目分析 观察样例就可以轻松发现&#xff1a;当 n n n 为奇数时&#xff0c;矩阵内的各个…

开源漏扫工具:DependencyCheck

开源漏扫工具&#xff1a;DependencyCheck Dependency-Check 是 OWASP&#xff08;Open Web Application Security Project&#xff09;的一个实用开源程序&#xff0c;用于识别项目依赖项并检查是否存在任何已知的&#xff0c;公开披露的漏洞。 DependencyCheck是一个开源的…

【并查集】模版

【模板】并查集 - 洛谷 #include <bits/stdc.h> using namespace std; const int N2e59; int a[N]; int Find(int x) {if(xa[x]){return x;}else{a[x]Find(a[x]);return a[x];} } void push(int x,int y) {a[Find(x)]Find(y);return ; } int main() {int n,m; cin>>…