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

leetcode_121 买卖股票的最佳时期

1. 题意

有一个股价变化图,你可以在一天买入,在未来一天卖出。

求通过这样一次操作的最大获利。

2. 题解

2.1 枚举

直接枚举,买入卖出的时间,肯定会超时啦~

时间复杂度为O(n2)O(n^2)O(n2)
空间复杂度为O(1)O(1)O(1)

class Solution {
public:int maxProfit(vector<int>& prices) {int ans = 0;int n = prices.size();for (int i = 0;i < n;++i) {for(int j = i + 1;j < n; ++j) {ans = max(ans, prices[j] - prices[i]);}}return ans;}
};
2.2 贪心

我们不难想到,我们每次卖股票的时候,只需要买入当前股票之前最低股份的股票就可以了!因此我们可以边统计最低股价,一边计算差值的最大值。

class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();int ans = 0;int mn = prices[0];for (int i = 1; i < n; ++i) {ans = max(prices[i] - mn, ans);mn  = min(mn, prices[i]);}return ans;}
};
2.3 动态规划

动态规划的思路和贪心的感觉差不多,也不知道这算不算动态规划~

我们用dp[i]dp[i]dp[i]表示卖出的股票是prices[i]prices[i]prices[i]时的最大差值。

因此ans=max⁡{dp[i]∣1≤i≤prices.size()−1}ans=\max \left\{dp[i]\ \Big |\ 1\le i \le prices.size()-1 \right\}ans=max{dp[i]  1iprices.size()1}

同样对于dp[i]dp[i]dp[i],我们需要知道iii之前的最小股份,所以最终代码跟

贪心差不多?空间优化完后,代码估计就跟贪心一样,就不写了。

class Solution {
public:int maxProfit(vector<int>& prices) {int n   = prices.size();int ans = 0;vector<int> dp(n + 1, 0);int mn = prices[0];for (int i = 0;i < n; ++i) {dp[i + 1] = max( dp[i], prices[i] - mn);mn = min( prices[i], mn);}return dp[n];}
};
2.4 差分+动态规划

这个题目跟lc53 最大子数组和, 是相互变形的关系。

其实也就是差分和前缀和的关系。

lc53可以通过前缀和转换成这个问题,当然这个问题也可以通过差分变成

最大子数组和。贴个代码吧,也懒得再解释了OvO

class Solution {
public:int maxProfit(vector<int>& prices) {adjacent_difference( prices.begin(), prices.end(), prices.begin());prices[0] = 0;int ans = 0;int pre = 0;for (auto v: prices) {pre += v;ans = max( pre, ans);if (pre < 0)pre = 0;}return ans;}
};
http://www.dtcms.com/a/287368.html

相关文章:

  • AWS Partner: Accreditation (Technical)
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 57(题目+回答)
  • QT动态加载动态库 QLibrary
  • 从车险理赔到快递签收:打通区块链与现实世界的“最后一公里”——解密预言机(Oracle)
  • aws(学习笔记第四十九课) ECS集中练习(1)
  • 基于深度学习的推荐系统:从协同过滤到神经网络
  • Java机考题:815. 公交路线 图论BFS
  • OpenCV 官翻7 - 对象检测
  • 用户中心——比如:腾讯的QQ账号可以登录到很多应用当中 02
  • Vue 3 中导出 Excel 文件
  • github上传代码
  • window、DOM、document、html 他们之间的关系是什么?
  • springboot基础-demo
  • Java中缓存的使用浅讲
  • Netty集群方案详解与实战(Zookeeper + Redis + RabbitMQ)
  • 深入理解设计模式:策略模式的艺术与实践
  • 云端成本治理利器:亚马逊云科技智能仪表盘(AWS Cost Intelligence Dashboard)深度解析
  • Android14 SystemUI 启动流程(2)
  • Spring MVC @RequestParam注解全解析
  • Spring MVC源码分析 DispatcherServlet#getHandlerAdapter方法
  • C# 中的强大运算符
  • 掌握配置文件(一):精通`properties`与`yml`的语法及选择
  • 【iOS】ZARA仿写
  • MySQL详解二
  • ros2高级篇之高可用启动文件及配置编写
  • 深入解析HDFS写入流程:管道机制与数据可靠性保障
  • (Python)类和类的方法(基础教程介绍)(Python基础教程)
  • 7月19日日记
  • SpringAI_Chat模型_DeepSeek模型--基础对话
  • Word快速文本对齐程序开发经验:从需求分析到实现部署