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

代码随想录算法训练营第46天 [ 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III ]

代码随想录算法训练营第46天 [ 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III ]


一、121. 买卖股票的最佳时机

链接: 代码随想录.
思路:dp[i][0] 第i天持有股票的最大利润 dp[i][1] 第i天不持有股票的最大利润
做题状态:看解析后做出来了

class Solution {
public:int maxProfit(vector<int>& prices) {// dp[i][0] 第i天 持有   股票的状态得到的最大利润// dp[i][1] 第i天 不持有 股票的状态得到的最大利润// 一直持有,就是前一天的持有状态 dp[i-1][0]// 或者我现在买了才持有,因为只能买卖一次,所以是-prices[i]// dp[i][0] = max(dp[i-1][0],-prices[i])// 一直不持有,就是前一天的不持有状态 dp[i-1][1]// 或者我现在卖了才不持有,所以是前一天持有状态+卖掉的前// dp[i-1][0]+price[i] dp[i][1] = max(dp[i-1][1],dp[i-1][0]+price[i])// 初始化 dp[0][0] = -prices[i]//        dp[0][1] = 0;vector<vector<int>> dp(prices.size(), vector<int>(2, 0));dp[0][0] = -prices[0];for (int i = 1; i < prices.size(); i++) {dp[i][0] = max(dp[i - 1][0], -prices[i]);dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]);}// for (vector<int> nums : dp) {//     cout << endl;//     for (int i : nums) {//         cout << i << " ";//     }// }return dp[prices.size() - 1][1];}
};

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

链接: 代码随想录.
思路:因为是多次买卖,所以每次买卖前要考虑前一天持有状态
做题状态:看解析后做出来了

class Solution {
public:int maxProfit(vector<int>& prices) {// dp[i][0]  第i天不持有 最大利润// dp[i][1]  第i天持有 最大利润// dp[i][0] = max(dp[i-1][0],dp[i-1][1]+prices[i])// dp[i][1] = max(dp[i-1][1],dp[i-1][0] -prices[i])vector<vector<int>> dp(prices.size(), vector<int>(2, 0));dp[0][0] = 0;dp[0][1] = -prices[0];for (int i = 1; i < prices.size(); i++) {dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] + prices[i]);dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - prices[i]);}return dp[prices.size()-1][0];}
};

三、123.买卖股票的最佳时机III

链接: 代码随想录.
思路:注释
做题状态:看解析后做出来了

class Solution {
public:int maxProfit(vector<int>& prices) {// dp[i][j]  i 代表第i天//  j有五种情况 0—无操作 1-第一次持有 2-第一次卖出 3-第二次持有 4-第二次卖出//  dp[i][0] = dp[i-1][0]//  dp[i][1] = max(dp[i-1][1],dp[i-1][0] - prices[i])//  dp[i][2] = max(dp[i-1][2],dp[i-1][1] + prices[i])//  dp[i][3] = max(dp[i-1][3],dp[i-1][2] - prices[i])//  dp[i][4] = max(dp[i-1][4],dp[i-1][3] + prices[i])vector<vector<int>> dp(prices.size(), vector<int>(5, 0));dp[0][0] = 0;dp[0][1] = -prices[0];dp[0][2] = 0;dp[0][3] = -prices[0];dp[0][4] = 0;for (int i = 1; i < prices.size(); i++) {dp[i][0] = dp[i - 1][0];dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - prices[i]);dp[i][2] = max(dp[i - 1][2], dp[i - 1][1] + prices[i]);dp[i][3] = max(dp[i - 1][3], dp[i - 1][2] - prices[i]);dp[i][4] = max(dp[i - 1][4], dp[i - 1][3] + prices[i]);}return dp[prices.size() - 1][4];}
};
http://www.lryc.cn/news/379409.html

相关文章:

  • 基于IDEA的Maven简单工程创建及结构分析
  • 解锁空间数据奥秘:ArcGIS Pro与Python双剑合璧,处理表格数据、矢量数据、栅格数据、点云数据、GPS数据、多维数据以及遥感云平台数据等
  • 后端路线指导(4):后端春招秋招经验分享
  • 面完小红书算法岗,心态崩了。。。
  • Android 断点续传进阶之多线程下载
  • Python爬虫学习 | Scrapy框架详解
  • 用户态协议栈05—架构优化
  • 模拟退火算法
  • Java匿名类
  • G7易流赋能化工物流,实现安全、环保与效率的共赢
  • y=sin(2x)
  • 快捷方式(lnk)--加载HTA-CS上线
  • 从同—视角理解扩散模型(Understanding Diffusion Models A Unified Perspective)
  • docker 基本用法及跨平台使用
  • Vscode远程ubuntu
  • SHA256 安全散列算法加速器实验
  • Elasticsearch-ES查询单字段去重
  • 【Apache Doris】周FAQ集锦:第 7 期
  • EE trade:炒伦敦金的注意事项及交易指南
  • JAVA医院绩效考核系统源码 功能特点:大型医院绩效考核系统源码
  • Python神经影像数据的处理和分析库之nipy使用详解
  • 非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作
  • 使用Redis优化Java应用的性能
  • 基于Python的数据可视化大屏的设计与实现
  • 什么是N卡和A卡?有什么区别?
  • 四边形不等式优化
  • 这家民营银行起诉担保公司?暴露担保增信兜底隐患
  • vscode禅模式怎么退出
  • Java23种设计模式(四)
  • HTML静态网页成品作业(HTML+CSS)——故宫介绍网页(4个页面)