当前位置: 首页 > 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();//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];}
};

相关文章:

  • wait()和sleep()
  • PCIE Link Equalizaton
  • Java基础 - 集合框架总结与实战指南
  • Gin趣讲
  • 精益数据分析(3/126):用数据驱动企业发展的深度解析
  • Arcgis经纬线标注设置(英文、刻度显示)
  • Android主流播放器功能详解
  • 16.使用豆包将docker-compose的yaml转为k8s的yaml,安装各种无状态服务
  • uniapp-商城-26-vuex 使用流程
  • Java c线程等待ab线程执行完再执行
  • 关于DApp、DeFi、IDO私募及去中心化应用开发的综合解析
  • 4.15redis点评项目下
  • 3款本周高潜力开源AI工具(多模态集成_隐私本地化)
  • 暂存一下等会写
  • 选择排序(简单选择排序、堆排序)
  • 【探商宝】跨境关税博弈下的技术破局:从头部平台现象看数字贸易体系重构
  • 【FFmpeg从入门到精通】第一章-FFmpeg简介
  • bininote: 使用AI将视频转换了Markdown笔记
  • 使用Redis实现分布式限流
  • Chromium 134 编译指南 macOS篇:配置depot_tools(三)
  • 做海报兼职网站/有什么好用的搜索引擎
  • 公司网站设计与制作/百度seo关键词优化电话
  • 免费网站制作下载/关键词优化排名软件流量词
  • 知名企业核心价值观/长春做网站公司长春seo公司
  • 网站建设 pdf/搭建一个网站需要多少钱?
  • 网站建设要具备那些/西安百度推广联系方式