news 2026/4/25 8:50:53

【LeetCode刷题】买卖股票的最佳时机

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【LeetCode刷题】买卖股票的最佳时机

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

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

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

示例 1:

输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

示例 2:

输入:prices = [7,6,4,3,1]输出:0解释:在这种情况下, 没有交易完成, 所以最大利润为 0。

提示:

  • 1 <= prices.length <=
  • 0 <= prices[i] <=

解题思路

核心逻辑是记录历史最低买入价,实时计算当日卖出的利润

  1. 初始化 “最低买入价” 为第一天价格,“最大利润” 为 0;
  2. 遍历后续每天的价格:
    • 若当日价格低于 “最低买入价”,更新 “最低买入价”;
    • 计算 “当日价格 - 最低买入价” 的利润,若大于当前 “最大利润”,则更新 “最大利润”;
  3. 遍历结束后,返回 “最大利润”(若利润为负则返回 0)。

示例验证

示例 1:输入prices = [7,1,5,3,6,4]
  • 遍历过程:
    • 价格 1:min_price=1,利润 0 → max_profit=0;
    • 价格 5:利润 5-1=4 → max_profit=4;
    • 价格 3:利润 3-1=2 → 不更新;
    • 价格 6:利润 6-1=5 → max_profit=5;
    • 价格 4:利润 4-1=3 → 不更新;
  • 最终返回:5(符合预期)。
示例 2:输入prices = [7,6,4,3,1]
  • 遍历过程中,每日利润均为负数,max_profit 始终保持 0;
  • 最终返回:0(符合预期)。

核心优势

  • 时间复杂度 O (n):仅一次线性遍历,无嵌套操作,适配 10⁵级别的数组长度;
  • 空间复杂度 O (1):仅使用 2 个变量存储中间结果,无额外空间开销;
  • 鲁棒性:处理了 “数组长度不足 2”“价格持续下跌” 等边界场景。

Python代码:

from typing import List class Solution: def maxProfit(self, prices: List[int]) -> int: if len(prices) < 2: return 0 min_price = prices[0] max_profit = 0 for price in prices[1:]: min_price = min(min_price, price) current_profit = price - min_price max_profit = max(max_profit, current_profit) return max_profit # 测试用例 if __name__ == "__main__": solution = Solution() # 示例1 print(f"示例1输入: [7,1,5,3,6,4]") print(f"示例1输出: {solution.maxProfit([7,1,5,3,6,4])}") # 示例2 print(f"示例2输入: [7,6,4,3,1]") print(f"示例2输出: {solution.maxProfit([7,6,4,3,1])}") # 边界用例:数组长度为1 print(f"示例3输入: [5]") print(f"示例3输出: {solution.maxProfit([5])}") # 边界用例:价格持续上涨 print(f"示例4输入: [1,2,3,4,5]") print(f"示例4输出: {solution.maxProfit([1,2,3,4,5])}")

LeetCode提交代码:

from typing import List class Solution: def maxProfit(self, prices: List[int]) -> int: # 边界条件:数组长度不足2时,无法完成交易,利润为0 if len(prices) < 2: return 0 min_price = prices[0] # 记录历史最低买入价 max_profit = 0 # 记录最大利润 # 遍历每天的价格,计算最大利润 for price in prices[1:]: # 更新历史最低买入价 min_price = min(min_price, price) # 计算当日卖出的利润,并更新最大利润 current_profit = price - min_price max_profit = max(max_profit, current_profit) return max_profit

程序运行结果如下:

示例1输入: [7,1,5,3,6,4] 示例1输出: 5 示例2输入: [7,6,4,3,1] 示例2输出: 0 示例3输入: [5] 示例3输出: 0 示例4输入: [1,2,3,4,5] 示例4输出: 4

总结

本文介绍了股票买卖问题的解决方案,要求在给定股票价格数组中找到最大利润。算法通过记录历史最低买入价并实时计算当前利润来实现,时间复杂度O(n),空间复杂度O(1)。关键步骤包括:初始化最低价为第一天价格,遍历后续价格更新最低价并计算利润,最终返回最大利润(若为负则返回0)。示例验证和边界条件处理证明了算法的正确性和鲁棒性,适用于不同价格趋势的输入。Python代码实现简洁高效,通过测试用例验证了算法的有效性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:01:13

同一线程有两个boost::asio::io_context可以吗?

目录 1.什么是boost::asio::io_context&#xff1f; 2.核心接口详解 3.多线程使用&#xff08;核心进阶场景&#xff09; 3.1.多线程 run() 的核心特性 3.2.Strand&#xff1a;回调序列化&#xff08;解决线程安全&#xff09; 4.跨平台事件多路复用器&#xff08;核心适…

作者头像 李华
网站建设 2026/4/25 4:03:58

Z-image LoRA 训练整合包下载与使用教程(详细图文教程)

Z-image LoRA 训练整合包下载与使用教程&#xff08;详细图文教程&#xff09; 标签&#xff1a;Z-image、LoRA训练、AI绘图、AI模型训练、Z-image本地部署、LoRA微调、Stable Diffusion LoRA、Z-image整合包 最近后台有不少小伙伴问我&#xff1a;Z-image 的 LoRA 训练怎么…

作者头像 李华
网站建设 2026/4/24 5:26:00

第五十七篇-ComfyUI+V100-32G+安装SD1.5

环境 系统&#xff1a;CentOS-7 CPU : E5-2680V4 14核28线程 内存&#xff1a;DDR4 2133 32G * 2 显卡&#xff1a;Tesla V100-32G【PG503】 (水冷) 驱动: 535 CUDA: 12.2 ComfyUI:系统软件信息 系统信息 OS linux Python Version 3.12.12 | packaged by Anaconda, Inc. | (mai…

作者头像 李华
网站建设 2026/4/24 17:39:28

【异常】豆包TTS语音合成常见报错及SSML代码实现解决方案

一、报错内容 在豆包TTS语音合成使用过程中,出现以下三类典型读音错误,影响语音输出准确性: 符号读音错误:输入文本“睡眠时间7-8小时”,预期输出“睡眠时间7至8小时”,实际输出“睡眠时间7减8小时”; 多音字发音错误:输入文本“偏好”(正确读音为piān hǎo,“好”…

作者头像 李华
网站建设 2026/4/23 17:46:06

基于数据挖掘的中风智能预测系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 系统概述 随着医疗大数据的快速发展&#xff0c;利用机器学习技术辅助疾病诊断已成为智慧医疗的重要方向。本项目开发了一套基于数据挖掘的中风智能预测系统。该系统旨在通过分析患者的性别、年龄、生活习惯…

作者头像 李华
网站建设 2026/4/25 6:56:24

Windows右键菜单优化全攻略:告别卡顿的3大诊断与4步修复方案

Windows右键菜单优化全攻略&#xff1a;告别卡顿的3大诊断与4步修复方案 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 当点击文件后那个小圆圈不停旋转&#x…

作者头像 李华