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

LeetCode 121. Best Time to Buy and Sell Stock 题解

LeetCode 121. Best Time to Buy and Sell Stock 题解

题目描述

给定一个数组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。

解题思路

方法:动态规划

思路

  • 维护一个变量min_price,记录当前为止的最低价格
  • 维护一个变量max_profit,记录当前为止的最大利润
  • 遍历数组,对于每个价格:
    • 更新min_price为当前价格和min_price的较小值
    • 计算当前价格与min_price的差值,更新max_profit为当前差值和max_profit的较大值

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组的长度。只需要遍历数组一次。
  • 空间复杂度:O(1),只需要常数级的额外空间。

代码实现

方法:动态规划

class Solution: def maxProfit(self, prices: List[int]) -> int: if not prices: return 0 # 初始化最低价格和最大利润 min_price = prices[0] max_profit = 0 # 遍历数组 for price in prices: # 更新最低价格 min_price = min(min_price, price) # 计算当前利润,并更新最大利润 max_profit = max(max_profit, price - min_price) return max_profit

测试用例

测试用例 1:

输入:prices = [7,1,5,3,6,4]
输出:5

测试用例 2:

输入:prices = [7,6,4,3,1]
输出:0

总结

本题是动态规划的经典应用问题,主要考察对动态规划思想的理解和使用。通过使用动态规划,我们可以高效地计算出买卖股票的最佳时机所能获取的最大利润。

动态规划的核心思想是:维护一个变量记录当前为止的最低价格,维护一个变量记录当前为止的最大利润,遍历数组,更新最低价格和最大利润。

这种方法不仅适用于买卖股票的最佳时机问题,还可以应用于许多其他需要寻找最大差值的问题。掌握动态规划的思想,对于解决这类问题非常重要。

http://www.cnnetsun.cn/news/1875546.html

相关文章:

  • 解决黑苹果EFI配置难题的OpCore Simplify深度技术指南
  • Word参考文献自动编号与引用:从基础操作到高级技巧
  • 5个实用技巧让你在AMD显卡上轻松运行Llama、Mistral等大语言模型
  • BES蓝牙音频平台:从原理到实战的EQ调试与多模式设定指南
  • JDK1.8环境下的AI应用开发:Phi-4-mini-reasoning与传统Java系统的集成案例
  • 【限时开源】我们刚交付的金融级AIAgent记忆中间件MemCore v1.3——支持ACID语义、跨会话记忆溯源、审计级WAL日志(仅开放首批200个License)
  • Grafana高效监控模板精选(持续更新中)
  • 新手避坑指南:用Cypress FX3 SDK 1.3搭建SlaveFifoSync固件,从main函数到DMA回调的完整流程解析
  • Java 代码质量与静态分析:提升代码可靠性
  • 告别玩具数据集!用MVTec AD手把手教你搞定工业缺陷检测(附实战代码)
  • 球树(Ball-Tree)索引结构:从原理到KNN高效搜索实践
  • 4月14日直播丨CANNBot 开发进阶:Ascend C算子开发实操
  • 基于Grafana+Prometheus+Micrometer的JVM性能监控实战指南
  • WRF-Hydro在Ubuntu 22.04 LTS上的系统化部署与编译实战
  • 解锁TDC-GPX多通道潜力:构建高精度激光测距系统的核心设计
  • OpenHarmony LiteOS-M Shell 命令开发指南
  • 5分钟解决YOLOv10安装难题:新手必看终极部署指南
  • 什么是梯度下降原理?
  • Caddy实战:一键开启HTTPS与HTTP3/QUIC的完整指南
  • 【AIAgent界面设计权威白皮书】:基于178个真实落地项目的数据验证——响应延迟>380ms时用户放弃率飙升63%
  • 使用 Vue 3 组合式 API 封装表单验证逻辑的完整指南
  • STM32电机驱动避坑指南:TIM1互补输出与死区时间计算全解析(从公式到代码)
  • KingstVIS 逻辑分析仪使用手册
  • AIAgent迁移学习策略重构迫在眉睫:Gartner最新评估显示68%企业正面临策略过时危机
  • AIAgent开发入门到底难在哪?20年架构师拆解2026奇点大会首推的7层能力模型
  • 史上最大在轨计算集群正式开放商业运营
  • VMware Tools安装指南:在Win11虚拟机中实现高效性能优化
  • KonkerESP8266嵌入式MQTT/HTTP物联网通信框架解析
  • XML Notepad完全指南:3步掌握免费XML编辑器的高效使用方法
  • WorkshopDL:跨平台Steam创意工坊下载器的终极解决方案