LeetCode 122. 买卖股票的最佳时机 II

题目描述

122. 买卖股票的最佳时机 II

image-20250510111559095

image-20250510111615341

思路分析

解法一:贪心(推荐)

核心思路

允许无限次交易,等价于累加所有相邻两天的正差值

推导过程

  • prices = [a, b, c],最优利润 = (c - a) = (b - a) + (c - b)(分拆为逐日收益)
  • 因此:只要今天价格高于昨天(prices[i] > prices[i-1]),就加入利润
  • 这等价于每个「上坡」区间都完整参与交易

贪心正确性:每天独立决策「是否参与今日涨幅」,各决策互不影响,局部最优 = 全局最优。


复杂度分析

  • 时间复杂度:O(n),其中 n 为价格数组长度,仅遍历一次
  • 空间复杂度:O(1),仅使用常数额外空间
class Solution {
    public int maxProfit(int[] prices) {
        int res = 0;
        for (int i = 1; i < prices.length; i++) {
            // 只累加正差值(所有上涨天数的利润)
            if (prices[i] > prices[i - 1]) {
                res += prices[i] - prices[i - 1];
            }
        }
        return res;
    }
}
func maxProfit(prices []int) int {
	var res int
	for i := 1; i < len(prices); i++ {
		// 只累加正差值(所有上涨天数的利润)
		if prices[i] > prices[i-1] {
			res += prices[i] - prices[i-1]
		}
	}
	return res
}

相似题目

题目 难度 考察点
121. 买卖股票的最佳时机 简单 一次交易贪心/DP
123. 买卖股票的最佳时机 III 困难 最多两次交易 DP
188. 买卖股票的最佳时机 IV 困难 最多 k 次交易 DP
309. 买卖股票的最佳时机含冷冻期 中等 状态机 DP
714. 买卖股票的最佳时机含手续费 中等 贪心/DP
53. 最大子数组和 中等 贪心/DP 思路类似
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/91892556
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!