买卖股票的最佳时机(动态规划)

目录

要求

思路

核心逻辑

Code

示例演示

关键点


要求

力扣第121题

给定一个数组 prices ,它的第 i 个元素 pricesi 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

思路

目标是:在最低价买入,最高价卖出,且卖出必须在买入之后。

核心逻辑

  1. 遍历每一天的价格
  2. 记录到当前为止的最低价格(作为可能的买入点)
  3. 计算如果今天卖出,能获得的最大利润 = 今天价格 - 历史最低价
  4. 不断更新最大利润

Code

javascript 复制代码
var maxProfit = function(prices) {
    let res = 0;                    // 最大利润,初始为0(不买卖)
    let minPrice = prices[0];       // 初始化第一天为最低价
    
    for (const p of prices) {       // 遍历每一天的价格
        res = Math.max(res, p - minPrice);  // 计算今天卖出的利润,更新最大利润
        minPrice = Math.min(minPrice, p);   // 更新历史最低价
    }
    
    return res;                     // 返回最大利润
};

示例演示

假设 prices = 7, 1, 5, 3, 6, 4

当前价格 历史最低价 当前利润(价格-最低) 最大利润res
7 7 0 0
1 1 0 0
5 1 4 4
3 1 2 4
6 1 5 5
4 1 3 5

结果:5(在第2天1元买入,第5天6元卖出)

关键点

  • 时间复杂度:O(n),只遍历一次
  • 空间复杂度:O(1),只用了常数空间
  • res 初始为0,保证如果价格一直下跌,不会亏本(选择不买卖)
  • 更新 minPrice 必须在计算利润之后,确保不会在同一天买卖
相关推荐
Navigator_Z39 分钟前
LeetCode //C - 1223. Dice Roll Simulation
c语言·算法·leetcode
171320330计算机毕设编程41 分钟前
2027计算机毕设五大方向对比&选题推荐
java·ide·python·算法·django·php·推荐算法
万物智能1 小时前
设备树DTS-【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
后端·算法
代码不停1 小时前
子数组问题
java·算法
小欣加油1 小时前
Leetcode2058 找出临界点之间的最小和最大距离
数据结构·c++·算法·leetcode·职场和发展
华华哥20221 小时前
《模型不玄学》第25章 双头模型:共享底座 + 两个分支
算法
Yfhonier1 小时前
6441. 特别的除法
c++·算法
华华哥20222 小时前
《模型不玄学》第5章 看懂你的数据:先认字段,再过门禁
算法
国科安芯2 小时前
低轨卫星姿轨控系统中抗辐射MCU的选型依据与工程实践
单片机·嵌入式硬件·算法·架构·系统安全·低轨卫星·抗辐射
高亦真2 小时前
今天是学习嵌入式的第33天
linux·学习·算法