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

目录

要求

思路

核心逻辑

Code

示例演示

关键点


要求

力扣第121题

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 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 必须在计算利润之后,确保不会在同一天买卖
相关推荐
小O的算法实验室17 小时前
2024年IEEE TMC SCI1区TOP,面向无人机辅助 MEC 系统的轨迹规划与任务卸载的双蚁群算法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
无才顽石17 小时前
什么是数学
算法·数理象
CoderCodingNo18 小时前
【GESP】C++五级真题(数论, 贪心思想考点) luogu-B4070 [GESP202412 五级] 奇妙数字
开发语言·c++·算法
百***588418 小时前
MATLAB高效算法实战技术文章大纲1
人工智能·算法·matlab
hans汉斯18 小时前
【人工智能与机器人研究】自动移液设备多轴运动控制系统设计
算法·机器学习·3d·自然语言处理·机器人·硬件架构·汉斯出版社
guygg8818 小时前
经典信道估计MATLAB实现(含LSMMSE算法)
深度学习·算法·matlab
foundbug99919 小时前
最小二乘支持向量机(LSSVM)回归的解析
算法·支持向量机·回归
程芯带你刷C语言简单算法题19 小时前
Day43~实现一个算法求一个数字的树根
c语言·开发语言·算法·c
柳鲲鹏19 小时前
关于#pragma pack(push, 8),DeepSeek回答错误
算法