当前位置: 首页 > news >正文

leetcode 121. Best Time to Buy and Sell Stock

题目描述

本题属于动态规划类问题。

dp数组的含义

dp[i][0]表示从第0天到第i天为止,处于持有股票的状态下,账户里的最大金额。

dp[i][1]表示从第0天到第i天为止,处于不持有股票的状态下,账户里的最大金额。

按照这个定义dp[n-1][1]就是问题的答案。

dp数组的初始化

        dp[0][0] = -prices[0]; //表示买入了第0天的股票,手里账户金额是负数

        dp[0][1] = 0;  //表示到第0天为止,不持有股票即不买入第0天的股票的话,账户金额是0

递推公式的分析

从第0天到第i天为止,导致持有股票的状态有两种可能的原因:一是第0天到第i-1天的某一天买入了股票,对应dp[i-1][0]。二是第i天买入了股票,需要支付prices[i]。

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

从第0天到第i天为止,导致不持有股票的状态有两种可能的原因:一是从第0天到第i-1天为止就是不持有股票的状态(此情况下,第i天没法卖出股票)。二是第i天卖出了股票,第i天能卖出股票的前提是从第0天到第i-1天为止是持有股票的状态。

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

代码

class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();//dp[i][0]表示从第0天到第i天为止,处于持有股票的状态下,账户里的最大金额//dp[i][1]表示从第0天到第i天为止,处于不持有股票的状态下,账户里的最大金额vector<vector<int>> dp(n);for(int i = 0;i < n;i++){dp[i].resize(2);}dp[0][0] = -prices[0]; //表示买入了第0天的股票,手里账户金额是负数dp[0][1] = 0;  //表示到第0天为止,不持有股票即不买入第0天的股票的话,账户金额是0for(int i = 1;i < n;i++){//从第0天到第i天为止,导致持有股票的状态有两种可能的原因,//一是第0天到第i-1天的某一天买入了股票,对应dp[i-1][0]//二是第i天买入了股票,需要支付prices[i]dp[i][0] = max(dp[i-1][0],-prices[i]);//从第0天到第i天为止,导致不持有股票的状态有两种可能的原因://一是从第0天到第i-1天为止就是不持有股票的状态(此情况下,第i天没法卖出股票)//二是第i天卖出了股票,第i天能卖出股票的前提是从第0天到第i-1天为止是持有股票的状态dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i]);}return dp[n-1][1];}
};

http://www.mrgr.cn/news/98487.html

相关文章:

  • Redis入门(Java中操作Redis)
  • IMX6ULL2025年最新部署方案2在Ubuntu24.04上编译通过Qt5.12.9且部署到IMX6ULL正点原子开发板上
  • Java使用ANTLR4解析IDL文件
  • 【厦门大学】大模型概念、技术与应用实践
  • Linux命令+Git命令
  • 【Sequelize】关联模型和孤儿记录
  • 计算机网络 - 四次挥手相关问题
  • github配置ssh,全程CV
  • 2025年第十六届蓝桥杯省赛JavaB组真题回顾
  • 1×1卷积与GoogleNet
  • SMART PLC 脉冲轴展示屏项目调试记录(UDP通信+脉冲轴控制)
  • 03 UV
  • vue学习笔记06
  • 微服务1--服务架构
  • How to run ERSEM
  • 详解LeetCode中用字符串实现整数相加,字符串转整数及其溢出处理详解
  • Domain Adaptation领域自适应--李宏毅机器学习笔记
  • rk3588 驱动开发(一)字符设备开发
  • Python 垃圾回收机制全解析:内存释放与优化
  • Windows 图形显示驱动开发-WDDM 1.2功能—无显示器系统支持