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

leetcode 122. Best Time to Buy and Sell Stock II

题目描述

这道题可以用贪心思想解决。

本文介绍用动态规划解决。本题分析方法与第121题一样,详见leetcode 121. Best Time to Buy and Sell Stock

只有一点区别。第121题全程只能买入1次,因此如果第i天买入股票,买之前的金额肯定是初始金额0。本题可以买卖多次,情况分析见红色句子。

到第i天为止,导致此时持有股票的状态有两种可能的原因:一是到前一天(第i-1天)就是持有股票的状态(对应状态dp[i-1][0]),第i天什么也没做。二是第i天买入了股票(需要支付prices[i]),第i天能买入股票的前提是到第i-1天时是处于不持有股票的状态(对应状态dp[i-1][1]),这种情况是本题与第121题的唯一区别。

代码:

class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();//假设账户起始金额是0,也就是假设可以赊账买股票//dp[i][0]表示从第0天一直到第i天(包含第i天)为止,目前(第i天)处于持有股票的状态,账户里的最大金额//dp[i][1]表示从第0天一直到第i天(包含第i天)为止,目前(第i天)处于不持有股票的状态,账户里的最大金额vector<vector<int>> dp(n);for(int i = 0;i < n;i++){dp[i].resize(2);}dp[0][0] = - prices[0];//到第0天结束要处于持有股票的状态,那就是买入了第0天的股票,需要支付prices[0]dp[0][1] = 0;//到第0天结束要处于不持有股票的状态,那就是不买入第0天的股票或者当天买入当天卖出,账户变动是0,金额保持初始值0for(int i = 1;i < n;i++){//到第i天为止,导致此时持有股票的状态有两种可能的原因://一是到前一天(第i-1天)就是持有股票的状态(对应状态dp[i-1][0]),第i天什么也没做//二是第i天买入了股票(需要支付prices[i]),第i天能买入股票的前提是到第i-1天时是处于不持有股票的状态(对应状态dp[i-1][1]),这种情况是本题与第121题的唯一区别dp[i][0] = max(dp[i-1][0],dp[i-1][1] - prices[i]);//到第i天为止,导致此时处于不持有股票的状态有两种可能的原因://一是到前一天(第i-1天)就是不持有股票的状态(对应状态dp[i-1][1]),第i天什么也没做//二是第i天卖出了股票(收入prices[i]),第i天能够卖出股票的前提是第i-1天是处于持有股票的状态(对应状态dp[i-1][0])dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i]);}return dp[n-1][1];}
};

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

相关文章:

  • LeetCode -- Flora -- edit 2025-04-16
  • 深度学习-卷积层(代码+理论)python opencv源码(史上最全)
  • idea中提高编译速度研究
  • ESP8266/32作为AVR编程器(ISP programmer)的使用介绍
  • 基于DS-TWR(双边双向测距)的平面定位MATLAB例程,包含模拟数据生成、距离计算和最小二乘定位(附完整代码,订阅专栏后可直接查看)
  • JWT 鉴权机制 通俗易懂解释版本
  • 投行风控和交易高可靠分布式锁核心要素与实现方案
  • SparseDrive---论文阅读
  • 从信号处理角度理解图像处理的滤波函数
  • [Python] UV工具入门使用指南——小试牛刀
  • Antd中使用Form.List且有Select组件,过滤问题
  • Linux 软件管理
  • Linux:解决 yum 官方源无法使用(CentOS 7)
  • 51c自动驾驶~合集17
  • 从单模态到多模态:五大模型架构演进与技术介绍
  • 使用 Azure AKS 保护 Kubernetes 部署的综合指南
  • Docker 中启动 Nginx 容器
  • 宇瞳杯视讯镜头完成版(除公差/鬼像分析)
  • helm的go模板语法学习
  • 【星海随笔】Python-JSON数据的处理