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

代码随想录算法训练营第36期DAY51

DAY51

121买卖股票的最佳时机

做过了。算是二刷:来自力扣优质题解

贪心:

每次记录更新最小点和最大出售值。

  1. class Solution {
  2. public:
  3.     int maxProfit(vector<int>& prices) {
  4.         int cur,res=INT_MIN,curmin=INT_MAX;
  5.         for(int i=0;i<prices.size();i++){
  6.             if(prices[i]<curmin) curmin=prices[i];
  7.             cur=prices[i]-curmin;
  8.             if(cur>res) res=cur;
  9.         }
  10.         return res;
  11.     }
  12. };

暴力:

  1. class Solution {
  2. public:
  3.     int maxProfit(vector<int>& prices) {
  4.         int res=0;
  5.         for(int i=0;i<prices.size();i++){
  6.             for(int j=i+1;j<prices.size();j++)
  7.             res=max(res,prices[j]-prices[i]);
  8.         }
  9.         return res;
  10.     }
  11. };

动态规划:

算是比较系统的东西,记在纸质笔记本吧。

  1. class Solution {
  2. public:
  3.     int maxProfit(vector<int>& prices) {
  4.         if(prices.size()==1return 0;
  5.         vector<vector<int>> dp(prices.size(),vector<int>(2));
  6.         dp[0][0]=-1*prices[0];
  7.         dp[0][1]=0;
  8.         for(int i=1;i<prices.size();i++){
  9.             dp[i][0]=max(-prices[i],dp[i-1][0]);
  10.             dp[i][1]=max(prices[i]+dp[i-1][0],dp[i-1][1]);
  11.         }
  12.         return dp[prices.size()-1][1];
  13.     }
  14. };

滚动数组法:

  1. class Solution {
  2. public:
  3.     int maxProfit(vector<int>& prices) {
  4.         if(prices.size()==1return 0;
  5.         vector<intdp(2);
  6.         dp[0]=-1*prices[0];
  7.         dp[1]=0;
  8.         for(int i=1;i<prices.size();i++){
  9.             dp[0]=max(-prices[i],dp[0]);
  10.             dp[1]=max(prices[i]+dp[0],dp[1]);
  11.         }
  12.         return dp[1];
  13.     }
  14. };

时间竟然也快了很多,不知道为什么。

122买卖股票的最佳时机ii

做过贪心法:只要能赚钱就买卖。

  1. class Solution {
  2. public:
  3.     int maxProfit(vector<int>& prices) {
  4.         if(prices.size()==1return 0;
  5.         int sum=0;
  6.         for(int i=1;i<prices.size();i++){
  7.             int res=prices[i]-prices[i-1];
  8.             if(res>0) sum+=res;
  9.         }
  10.         return sum;
  11.     }
  12. };

动态规划:

想对了,[多次买入和一次买入]和上一题不同的地方就是多了一个项:-price[i]不够了,要写成:dp[i-1][1]-price[i]

  1. class Solution {
  2. public:
  3.     int maxProfit(vector<int>& prices) {
  4.         if (prices.size() == 1)
  5.             return 0;
  6.         vector<vector<int>> dp(prices.size(), vector<int>(2));
  7.         dp[0][0] = -1 * prices[0];
  8.         dp[0][1] = 0;
  9.         for (int i = 1; i < prices.size(); i++) {
  10.             dp[i][0] = max(dp[i - 1][1] - prices[i], dp[i - 1][0]);
  11.             dp[i][1] = max(dp[i - 1][0] + prices[i], dp[i - 1][1]);
  12.         }
  13.         return dp[prices.size() - 1][1];
  14.     }
  15. };

滚动数组:

  1. class Solution {
  2. public:
  3.     int maxProfit(vector<int>& prices) {
  4.         if (prices.size() == 1)
  5.             return 0;
  6.         vector<intdp(2);
  7.         dp[0] = -1 * prices[0];
  8.         dp[1] = 0;
  9.         for (int i = 1; i < prices.size(); i++) {
  10.             dp[0] = max(dp[1] - prices[i], dp[0]);
  11.             dp[1] = max(dp[0] + prices[i], dp[1]);
  12.         }
  13.         return dp[1];
  14.     }
  15. };

相关文章:

  • Liunx音频
  • 【C语言从入门到入土】第六章 指针(上)
  • 云服务器CPU和内存直接被zzh恶意挖矿程序打满,如何解决?
  • 搭建多平台比价软件你必须知道的几大知识板块
  • 树莓派设置开机自启动程序(可执行文件与python脚本)
  • selenium 输入框、按钮,输入点击,获取元素属性等简单例子
  • HPC: perf入门
  • 28-unittest批量执行(discover)
  • AI学习指南机器学习篇-决策树的特征选择和分裂准则
  • Linux | 标准IO编程
  • 【传知代码】DETR[端到端目标检测](论文复现)
  • Hash String 学习笔记
  • 简单通用的系统安装、备份、还原方法,支持 ARM 系统【Ventory+FirePE+DiskGenius】
  • 安装node
  • 数据结构笔记2 栈和队列
  • JavaScript-如何实现克隆(clone)函数
  • ➹使用webpack配置多页面应用(MPA)
  • emacs初体验
  • js ES6 求数组的交集,并集,还有差集
  • Mysql5.6主从复制
  • MySQL数据库运维之数据恢复
  • spring boot下thymeleaf全局静态变量配置
  • SQLServer之创建显式事务
  • Terraform入门 - 3. 变更基础设施
  • 不上全站https的网站你们就等着被恶心死吧
  • 高度不固定时垂直居中
  • 缓存与缓冲
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 将回调地狱按在地上摩擦的Promise
  • 如何利用MongoDB打造TOP榜小程序
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 突破自己的技术思维
  • 推荐一个React的管理后台框架
  • 我是如何设计 Upload 上传组件的
  • UI设计初学者应该如何入门?
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • # 数据结构
  • (2)leetcode 234.回文链表 141.环形链表
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (TOJ2804)Even? Odd?
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (六)DockerCompose安装与配置
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)Linux 多线程条件变量同步
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • . Flume面试题
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .Net MVC + EF搭建学生管理系统