1. LeetCode 122. 买卖股票的最佳时机 II
1.1 问题分析与解题思路
这道题的核心在于理解股票买卖的规则:可以多次买卖同一支股票,但必须在再次购买前出售掉之前的股票。这种设定下,我们的目标就是抓住所有的上涨区间。
想象一下股票价格走势图就像一座座小山丘。我们不需要预测最高点和最低点,只需要确保在每个上升坡道都参与其中。具体来说:
- 当今天的价格比昨天高时,我们就在昨天买入,今天卖出
- 如果连续多天上涨,这相当于每天都在买卖,效果等同于在最低点买入,最高点卖出
- 对于价格持平或下跌的日子,我们不做任何操作
这种贪心算法的思路之所以有效,是因为它完美捕捉了所有的盈利机会。每次有利润就立即锁定,不会错过任何上涨区间。
1.2 代码实现与优化
python复制class Solution:
def maxProfit(self, prices: List[int]) -> int:
profit = 0
for i in range(1, len(prices)):
if prices[i] > prices[i-1]:
profit += prices[i] - prices[i-1]
return profit
这个实现的时间复杂度是O(n),空间复杂度是O(1),已经是最优解。几个关键点需要注意:
- 从第二天开始比较(i从1开始)
- 只需要比较相邻两天的价格
- 不需要额外的存储空间
提示:在实际面试中,可能会被问到为什么这个贪心算法有效。可以解释为"所有上升区间的总和等于一系列连续小上升区间的累加"。
1.3 边界情况处理
- 空数组或单元素数组:直接返回0
- 持续下跌的市场:不会进行任何买卖,返回0
- 持续上涨的市场:累计所有单日涨幅
- 波动市场:只计算上涨日的差价
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. LeetCode 55. 跳跃游戏
2.1 问题理解与算法选择
这个问题要求判断是否能从数组起点跳到终点,其中每个元素表示在该位置可以跳跃的最大长度。这类问题通常可以用贪心算法解决。
关键观察点是:我们不需要关心具体跳到哪里,只需要关心最远能到达的位置。如
