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

LeetCode与Python控制台结果不一致问题(消灭怪物题)

排查LeetCode《消灭最大数量的怪物》代码本地与平台运行结果不一致问题

我在解决LeetCode题目《消灭最大数量的怪物》时,编写了如下Python代码:

class Solution(object):
    def eliminateMaximum(self, dist, speed):
        """
        :type dist: List[int]
        :type speed: List[int]
        :rtype: int
        """
        mapped = []
        killed = 0
        for i, v in enumerate(zip(dist, speed)):
            mapped.append([v[0]/v[1], v[0], v[1]])
            mapped.sort(key=lambda x: x[0])
        iterator = iter(mapped)
        while True:
            try:
                next(iterator)[1] = -1
                killed += 1
            except StopIteration:
                return killed
            for v in mapped[killed:]:
                v[1] = v[1]-v[2]
                if v[1] <= 0:
                    return killed

sol = Solution()
r = sol.eliminateMaximum([4,8,6,8,2,7,4], [1,3,3,1,10,1,1])
print(r)

本地Python控制台输出结果为预期的4,但在LeetCode平台运行时返回结果为2,请求排查原因。


问题原因分析

  1. 边添加边排序的逻辑错误:代码在for循环中每添加一个怪物数据就执行一次排序,这会导致排序后的列表顺序在每次循环中变化,最终的顺序和一次性排序所有元素的结果不一致,直接影响后续击杀顺序的判断。
  2. 浮点数精度差异:使用v[0]/v[1]计算怪物到达时间时,浮点数在不同Python环境中可能存在精度误差。比如某些怪物的到达时间计算结果在本地和LeetCode平台上的微小差异,会导致排序顺序不同,进而导致平台运行时提前触发怪物突破的判断。
  3. 模拟距离减少的冗余逻辑:实时修改怪物距离的模拟方式容易出错,且没有必要——怪物的到达时间是固定值,无需动态计算剩余距离,只需比较到达时间和击杀时间即可。

修正后的代码示例

class Solution(object):
    def eliminateMaximum(self, dist, speed):
        # 用整数计算每个怪物的到达时间(等价于向上取整 dist/speed)
        arrival_times = [(d + s - 1) // s for d, s in zip(dist, speed)]
        # 统一按到达时间排序
        arrival_times.sort()
        
        killed = 0
        for minute in range(len(arrival_times)):
            # 第minute分钟时,若当前怪物已经到达(到达时间<=当前分钟),则无法继续击杀
            if arrival_times[minute] <= minute:
                return killed
            killed += 1
        return killed

修正说明

  • 使用整数运算计算到达时间,彻底避免浮点数精度问题;
  • 先收集所有怪物的到达时间,再统一排序,保证顺序正确;
  • 通过比较到达时间和当前击杀时间(分钟数)来判断是否能继续击杀,逻辑简洁且符合题目要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:37:54