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

news/2024/11/24 14:06:27/

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

LeetCode 121 买卖股票的最佳时机

题目: 121.买卖股票的最佳时机

动规五部曲:

  • 确定dp数组以及下标的含义

**dp[i][0] 表示第i天持有股票所得最多现金 **

  • 确定递推公式

dp[i][0] = max(dp[i - 1][0], -prices[i])

  • dp数组如何初始化

由递推公式 dp[i][0] = max(dp[i - 1][0], -prices[i]); 和 dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0])可以看出其基础是要从dp[0][0]和dp[0][1]推导出来,dp[0][1] = 0

  • 确定遍历顺序

从递推公式可以看出dp[i]都是由dp[i - 1]推导出来的,从前向后遍历。

  • 举例来推导dp数组

整体代码:

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

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

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

本题和上题的区别是上题中,股票全程只能买卖一次,所以如果买入股票,那么第i天持有股票即dp[i][0]一定是 -prices[i]

本题因为一只股票可以买卖多次,所以当第i天买入股票的时候,所持有的现金可能有之前买卖过的利润。

dp[i][0] 表示第i天持有股票所得现金。

dp[i][1] 表示第i天不持有股票所得最多现金

整体代码:

lass 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.ppmy.cn/news/37882.html

相关文章

超详细WindowsJDK1.8与JDK11版本切换教程

文章目录一、JDK生效原理二、安装配置JDK11三、切换JDK11版本四、查看切换JDK11版本是否成功五、再次切换至JDK8版本六、查看切换JDK8版本是否成功一、JDK生效原理 想必大家都在为如何流畅的切换JDK版本问题而来&#xff0c;那么在此篇文章开始之前&#xff0c;首先我们来思考一…

蓝桥杯:阶乘约数

蓝桥杯&#xff1a;阶乘约数https://www.lanqiao.cn/problems/1020/learning/ 目录 题目描述 填空题&#xff1a;答案是 39001250856960000 题目分析 AC代码(Java) 暴力 线性筛 题目描述 填空题 定义阶乘 n!123⋅⋅⋅n。 请问 100! &#xff08;100 的阶乘&#xff09;有…

vue3+ts+vite+electron搭建桌面应用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 vue3tsviteelectron搭建桌面应用前言一、版本背景介绍二、过程1. 搭建vitevue-ts的项目2. 接入electron3. electron启动4. electron打包5. 项目目录梳理前言 提示&#xff1…

腾讯后端开发实习一面(24届)

毫无准备的腾讯一面&#xff0c;最近都在忙比赛去了&#xff0c;突然收到腾讯一面的邮件&#xff0c;直接没准备。。。 总结&#xff0c;除了Vue其他的都挺好&#xff0c;但是腾讯hr为啥Vue面我四个问题&#xff0c;不是面的后端开发吗&#xff0c;好难呀&#xff0c;都只能随…

Spring AOP:理解动态代理和 Advice

ProxyFactory cglib代理解析 jdk动态代理 动态代理技术在Spring中进行了封装,封装出来的类叫做ProxyFactory,表示是创建一个代理对象的一个工厂,比jdk动态代理和cglib代理更加方便,比如: public class UserService {public void test(){System.out.println("test...&qu…

2023年 合肥市庐阳区信息学竞赛区赛 小学组

2023年 合肥市庐阳区信息学竞赛区赛 小学组T1.快递盒(box) 问题描述 快递盒底面长为 a、宽为 b,货品包装的底面为正方形,边长为 c。快递盒同货品包装的高度一致,货品包装边要求同快递盒边平行。请问快递盒最多可以装入多少件货品? 输入格式 一行,三个整数 a、b 和 c,意…

Golang每日一练(leetDay0022)

目录 64. 最小路径和 Minimum Path Sum &#x1f31f;&#x1f31f; 65. 有效数字 Valid Number &#x1f31f;&#x1f31f;&#x1f31f; 66. 加一 Plus One &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 …

红黑树RBT(Read Black Tree)小结

顺序搜索 线性搜索&#xff1a;跟队列中一个个元素顺序比较时间复杂度是O(n)存在的问题&#xff1a;元素多时搜索很慢 二分搜索(Binary Search) 队列中的元素有序&#xff0c;比如从小到大每次把队列一分为二&#xff0c;每次跟队列中的中间元素比较时间复杂度是O(log2/logn…