LeetCode 121. 买卖股票的最佳时机|Python 解法详解

LeetCode 121. 买卖股票的最佳时机|Python 解法详解

CSDN 算法专题 · 数组与哈希表 | 难度:简单

题目信息

题目描述

给定每日股价,只允许先买入一次、后卖出一次,求最大利润;无法获利时返回 0。

示例

text 复制代码
输入:prices = [7,1,5,3,6,4]
输出:5

约束

1 ≤ prices.length ≤ 10⁵。

解题思路

核心观察

从左向右维护此前最低买入价。当天作为卖出日时,最大候选利润是当前价减最低价;更新全局最大值。时间顺序天然保证先买后卖。

推导与执行步骤

  1. 初始化最低价为无穷大
  2. 遍历每日价格
  3. 更新此前最低价格
  4. 计算当天卖出的利润并更新答案

为什么这个方法正确

算法始终围绕上述核心观察维护有效状态,并且每一步只排除已经能够证明不可能产生更优答案的情况。按照执行步骤处理后,所有可能影响答案的元素或节点都会被恰好检查,因此不会遗漏合法答案;状态更新又严格遵守题目约束,所以最终结果有效。

从边界看,空区间、单个元素、全部相同或完全不匹配等情况都会落入初始化条件或循环终止条件,不需要依赖未定义状态。实现时再重点检查下标、空节点和重复元素,即可保证算法在极端输入下仍然成立。

Python 代码

python 复制代码
# 解法核心:从左向右维护此前最低买入价。当天作为卖出日时,最大候选利润是当前价减最低价;更新全局最大值。时间顺序天然保证先买后卖。
# 实现步骤:
# 1. 初始化最低价为无穷大
# 2. 遍历每日价格
# 3. 更新此前最低价格
# 4. 计算当天卖出的利润并更新答案

from typing import List

class Solution:

    def maxProfit(self, prices: List[int]) -> int:
        min_price = float('inf')  # 记录当前日期之前出现过的最低价格
        max_profit = 0  # 记录当前能够获得的最大利润
        for price in prices:
            if price < min_price:
                min_price = price  # 记录当前日期之前出现过的最低价格
            elif price - min_price > max_profit:
                max_profit = price - min_price  # 记录当前能够获得的最大利润
        return max_profit

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

易错点

最低价只能来自当前日或更早,不能用未来价格。

总结

这道题的关键是:从左向右维护此前最低买入价。理解这一点后,再结合边界条件检查,代码就能保持清晰且稳定。

相关推荐
kyrie_sakura26 分钟前
大模型学习7 -- 深度学习2 -- 张量
python·深度学习
智鸟科技GemeOpen开发者智能设备1 小时前
智能插座二次开发如何接入Home Assistant,从零开始完整工程实现(Python+React)
开发语言·python·物联网·react.js·智能家居
hqyjzsb1 小时前
法律 Prompt 干货:搭建合同审查提示词要包含哪些要素
开发语言·人工智能·python·职场和发展·数据分析·prompt·业界资讯
Andreapiki1 小时前
风险审计校招技术栈拆解:SQL、Python、Power BI在2026届JD中的真实权重
数据库·python·sql
Discipline10292 小时前
尼泊尔河流流量:天气驱动的预测与高流量风险
人工智能·算法
2601_966949652 小时前
股票池发生变化后,如何高效更新行情数据?从全量刷新到增量同步
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
XuCoder2 小时前
改一个数,右边全得重算,这题怎么扛住两万次查询
算法
小羊没烦恼!2 小时前
在Scrum中实施敏捷建模
java·开发语言·windows·算法·c#
玖石书2 小时前
python-uv-windows环境安装方案
windows·python·uv
weixin_307779132 小时前
基于睿擎工业开发平台的预训练视觉模型轻量化适配与低代码部署优化
开发语言·算法