news 2026/7/6 20:00:59

LeetCode122. 买卖股票的最佳时机 II:贪心策略实现最大利润

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode122. 买卖股票的最佳时机 II:贪心策略实现最大利润

在股票交易类算法题中,力扣122题「买卖股票的最佳时机 II」是经典的贪心算法应用场景。这道题的核心要求是:允许在任意天数买入和卖出股票(可多次交易),求能获得的最大利润。本文将从题目分析、思路推导、代码实现到复杂度分析,完整拆解这道题的最优解法。

一、题目理解

题目描述

给你一个整数数组 `prices` ,其中 `prices[i]` 表示某支股票第 `i` 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持有一股股票。你也可以先购买,然后在同一天出售。返回你能获得的最大利润 。

核心规则拆解

题目隐含的最优交易策略可以简化为:

  • 从第2天开始,若当天股价 > 前一天股价,说明存在盈利空间:在前一天买入,当天卖出,赚取差价;

  • 若当天股价 ≤ 前一天股价,无盈利空间,不进行任何操作;

  • 所有上涨交易日都进行买卖,下跌/持平交易日不操作,最终利润即为最大值。

举个直观例子:

假设 `prices = [7,1,5,3,6,4]`,交易过程如下:

  • 第2天(价格1)< 第1天(价格7)→ 不操作;

  • 第3天(价格5)> 第2天(价格1)→ 买入第2天、卖出第3天,利润 `5-1=4`;

  • 第4天(价格3)< 第3天(价格5)→ 不操作;

  • 第5天(价格6)> 第4天(价格3)→ 买入第4天、卖出第5天,利润 `6-3=3`;

  • 第6天(价格4)< 第5天(价格6)→ 不操作;

  • 总利润:`4+3=7`,为该案例的最大利润。

二、解题思路:贪心算法

贪心策略核心

贪心算法的关键是「局部最优推导全局最优」。对于本题,每天的最优决策就是:只要当天股价比前一天高,就赚取这部分差价;否则不操作。把所有单日的正差价累加,最终结果就是全局最大利润。

思路推导

  1. 初始化利润 `profit = 0`;

  2. 遍历股价数组(从第2天开始,即索引1);

  3. 对于每个交易日 `i`,计算 `prices[i] - prices[i-1]`:

    1. 若差值 > 0,说明盈利,将差值加入总利润;

    2. 若差值 ≤ 0,说明无盈利,跳过;

  4. 遍历结束后,总利润即为最大值。

三、代码实现

完整代码实现(Java)

class Solution { public int maxProfit(int[] prices) { int ans = 0; for (int i = 1; i < prices.length; i++){ if(prices[i] > prices[i-1]){ ans += prices[i] - prices[i-1]; } } return ans; } }

四、复杂度分析

时间复杂度

遍历一次股价数组,遍历次数为 `n-1`(`n` 为数组长度),因此时间复杂度为O(n)。

空间复杂度

仅使用了常量级的额外空间,未开辟新的数组或容器,因此空间复杂度为O(1)

总结

  1. LeetCode122题的核心解法是贪心算法,通过“累加所有单日正差价”实现全局最大利润;

  2. 算法时间复杂度O(n)、空间复杂度O(1),是理论最优解;

  3. 贪心策略的关键是“局部最优”:只要当天股价比前一天高,就赚取该部分差价,最终累加结果即为全局最优。

这道题的核心启示是:在允许多次交易的股票问题中,无需纠结“长期持有”,抓住每一次短期盈利的机会,最终就能获得最大收益。这种“见好就收”的贪心思路,也是算法中局部最优推导全局最优的典型应用。

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

【前端开发】Vue项目多客户配置自动化方案【二】

背景在开发面向多学校的Vue项目时&#xff0c;每个学校都需要独立的配置&#xff08;名称、Logo、背景图、API地址等&#xff09;。传统的多环境配置方案会产生大量脚本命令&#xff0c;维护成本较高。为此&#xff0c;设计了一套更简洁的单一入口方案&#xff0c;通过交互式选…

作者头像 李华
网站建设 2026/7/1 18:38:58

重塑智算存储范式:绿算技术NVMe-oF芯片解决方案全景剖析

在人工智能计算进入“系统竞赛”的今天&#xff0c;我们面临一个核心矛盾&#xff1a;GPU算力以每年翻倍的速度增长&#xff0c;而存储访问的速度与效率却成为制约整体系统性能的致命瓶颈。特别是在大模型推理场景中&#xff0c;KV Cache对显存的巨大占用与高并发、低延迟访问需…

作者头像 李华
网站建设 2026/6/26 11:58:10

基于 Vue + VueUse 的 WebSocket 优雅封装:打造高可用的全局连接管理方案

在现代前端开发中&#xff0c;WebSocket 作为全双工通信协议&#xff0c;被广泛应用于实时消息推送、在线协作、实时数据监控等场景。但原生 WebSocket API 使用繁琐&#xff0c;且在多连接、重连、心跳检测、状态管理等场景下需要大量重复代码。本文将分享基于 Vue3 VueUse 的…

作者头像 李华
网站建设 2026/6/26 11:58:12

什么是动态ip/ 什么情况下使用动态ip

动态住宅 IP 核心解析&#xff1a;跨境业务必备工具在网络应用及跨境业务中&#xff0c;代理 IP 应用广泛。动态住宅 IP 作为核心类型之一&#xff0c;需结合业务需求选择&#xff0c;以下为其核心解析。一、动态住宅 IP 是什么&#xff1f;动态住宅 IP&#xff08;轮换代理&am…

作者头像 李华
网站建设 2026/7/1 21:26:44

快速弄懂POM设计模式

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 今天&#xff0c;我们来聊聊 Web UI 自动化测试中的 POM 设计模式。 为什么要用 POM 设计模式 前期&#xff0c;我们学会了使用 PythonSelenium 编写 Web UI …

作者头像 李华