You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Leetcode买卖股票最佳时机问题为何所有测试用例均返回0?

问题分析与修复

你的代码存在几个关键错误,导致所有测试用例都返回0,逐个拆解说明:

1. 原地排序引发的数组破坏与变量错误

prices.sort(reverse=True)是原地排序方法——它会直接修改原prices数组的顺序,并且返回值是None。执行prices1 = prices.sort(reverse=True)后:

  • prices1的值是None,并非你预期的排序后数组
  • 原prices已经被强制改成降序排列(比如测试用例[7,1,5,3,6,4]会变成[7,6,5,4,3,1])

这直接导致后续逻辑完全偏离:你拿None和prices数组做prices1 == prices比较,结果永远是False;进入else分支后,处理的是被打乱的降序数组,自然计算出的差值为0。

2. 核心逻辑的缺陷

即使数组没被打乱,你的逻辑(找全局最小值位置,取后续子数组再算最大减最小)也不严谨——比如如果最小值出现在数组最后一位,切片后只有一个元素,差值必然为0;而且题目要求的是在最低点买入之后的最高点卖出,你的逻辑虽然方向对,但排序错误直接让它完全失效。

修复后的代码

from typing import List

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[1:]:
            # 更新遍历过程中遇到的最低价格
            if price < min_price:
                min_price = price
            # 计算当前价格卖出的利润,维护最大利润值
            else:
                current_profit = price - min_price
                if current_profit > max_profit:
                    max_profit = current_profit
        
        return max_profit

修复说明

  • 不修改原数组,仅在遍历过程中记录当前遇到的最低价格
  • 对每个后续价格,计算「当前最低价格买入、当前价格卖出」的利润,持续更新最大利润
  • 空数组的边界情况直接返回0,符合题目要求

用测试用例[7,1,5,3,6,4]验证:

  • 遍历到1时,更新最低价格为1
  • 遍历到5时,利润5-1=4,最大利润更新为4
  • 遍历到6时,利润6-1=5,最大利润更新为5
  • 最终返回5,符合预期

内容的提问来源于stack exchange,提问作者Rishav Thakur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:35:29