BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #26618同步于 2025/10/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

【问题】Leetcode bug?本地跑的结果和力扣给的不一样

oames
2025/10/24镜像同步10 回复
贴主主要用python刷力扣,今天在刷leetcode4 Median of Two Sorted Arrays遇到了一个想不通的问题。 代码贴在文后,主要遇到的情况是,在测试案例[1,2], [3,4]时,力扣判我的代码错,并显示我输出的结果为2.0,与实际答案2.5相悖。 但是我在本地用pycharm跑的时候,print输出是2.5没错,这是为啥呢?恳请大佬解惑 ================leetcode结果================ > 2025/10/24 15:37:12 运行成功: 测试用例:[1,2] [3,4] 测试结果:2.00000 期望结果:2.50000 ================本地调用================ if __name__ == '__main__': solution = Solution() # your test code here res = solution.findMedianSortedArrays([1,2], [3,4]) print(res) ================本地结果================ /usr/bin/python3.13 /tmp/leetcode/editor/cn/MedianOfTwoSortedArrays.py 2.5 Process finished with exit code 0 ================代码=============== class Solution(object): def findMedianSortedArrays(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: float """ A, B = nums1, nums2 if len(A) > len(B): A, B = B, A # Focus on only the smaller array l, r = 0, len(A) - 1 total = len(nums1) + len(nums2) half = total // 2 while True: mA = (l + r) // 2 mB = half - (mA + 1) - 1 currA = A[mA] if mA >= 0 else float('-inf') afterA = A[mA + 1] if (mA + 1) < len(A) else float('inf') currB = B[mB] if mB >= 0 else float('-inf') afterB = B[mB + 1] if (mB + 1) < len(B) else float('inf') if currA <= afterB and currB <= afterA: # odd if total % 2 == 1: return min(afterA, afterB) # else: # even return ((max(currA, currB) + min(afterA, afterB)) / 2) elif currA > afterB: r = mA - 1 else: l = mA + 1
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
oames机器人#1 · 2025/10/24
另外值得一提的是,我在leetcode.cn和leetcode.com都测试过相同的代码,均不通过。会是因为python版本问题吗?但是我认为这个测试例主要走的是这个返回代码: return ((max(currA, currB) + min(afterA, afterB)) / 2) 难道老版本的python无法正确执行我想要的浮点数除法吗?
cxq668机器人#2 · 2025/10/25
要浮点数就变成2.0
oames机器人#3 · 2025/10/25
晕,今天上午解决了,换Python3就可以了[ema2] 【 在 cxq668 的大作中提到: 】 : 要浮点数就变成2.0
ykprocess机器人#4 · 2025/10/25
你的当务之急,是学会问ai
sdtyds机器人#5 · 2025/10/25
这是典型的「整除」坑:你在力扣跑到的是 Python 2(或当作 Py2 规则执行),而你本地用的是 Python 3.13。 在 Python 2 里,两个 int 相除用 / 会做整数除法,结果会被截断成整数;而 Python 3 的 / 是真除法,会得到浮点数。 你的这行在偶数总长度时会出问题(在 Py2 环境): return ((max(currA, currB) + min(afterA, afterB)) / 2) 在用例 [1,2] 和 [3,4] 里,这就是 (2 + 3) / 2, [bbsemoji8226] Py2:5 / 2 == 2 → 显示为 2.00000 [bbsemoji8226] Py3:5 / 2 == 2.5 → 正确 解决办法任选其一: 1. 在力扣选择 Python3 提交。(最直接) 2. 把除法改成浮点或乘 0.5,强制真除法: return (max(currA, currB) + min(afterA, afterB)) / 2.0 # 或 return 0.5 * (max(currA, currB) + min(afterA, afterB)) 3. 如果必须走 Py2,文件头加: from __future__ import division 你的算法本身没问题,差别只在运行时的 Python 版本/除法规则。 【 在 oames 的大作中提到: 】 : 贴主主要用python刷力扣,今天在刷leetcode4 Median of Two Sorted Arrays遇到了一个想不通的问题。 : 代码贴在文后,主要遇到的情况是,在测试案例[1,2], [3,4]时,力扣判我的代码错,并显示我输出的结果为2.0,与实际答案2.5相悖。 但是我在本地用pycharm跑的时候,print输出是2.5没错,这是为啥呢?恳请大佬解惑 : ================leetcode结果================ : ............
oames机器人#6 · 2025/10/25
谢谢!你的解释很清楚,帮助很大! 【 在 sdtyds 的大作中提到: 】 : 这是典型的「整除」坑:你在力扣跑到的是 Python 2(或当作 Py2 规则执行),而你本地用的是 Python 3.13。 : 在 Python 2 里,两个 int 相除用 / 会做整数除法,结果会被截断成整数;而 Python 3 的 / 是真除法,会得到浮点数。 : 你的这行在偶数总长度时会出问题(在 Py2 环境): : return ((max(currA, currB) + min(afterA, afterB)) / 2) : ............
oames机器人#7 · 2025/10/25
好的。其实有询问过chatgpt,但是它似乎陷入了幻觉,反复重复一些明显不相关的回答,没能解决我的困惑。不过还是谢谢你的建议 【 在 ykprocess 的大作中提到: 】 : 你的当务之急,是学会问ai
wy2022210528机器人#8 · 2025/10/25
一直用py3就好,90%的问题可以解决 可以在vscode安装leetcode插件刷题,亲测好用
oames机器人#9 · 2025/10/25
确实好用!我也在用pycharm的插件写 【 在 wy2022210528 的大作中提到: 】 : 一直用py3就好,90%的问题可以解决 : 可以在vscode安装leetcode插件刷题,亲测好用