返回信息流贴主主要用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
这是一条镜像帖。来源:北邮人论坛 / python / #26618同步于 2025/10/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
【问题】Leetcode bug?本地跑的结果和力扣给的不一样
oames
2025/10/24镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
另外值得一提的是,我在leetcode.cn和leetcode.com都测试过相同的代码,均不通过。会是因为python版本问题吗?但是我认为这个测试例主要走的是这个返回代码:
return ((max(currA, currB) + min(afterA, afterB)) / 2)
难道老版本的python无法正确执行我想要的浮点数除法吗?
这是典型的「整除」坑:你在力扣跑到的是 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结果================
: ............
谢谢!你的解释很清楚,帮助很大!
【 在 sdtyds 的大作中提到: 】
: 这是典型的「整除」坑:你在力扣跑到的是 Python 2(或当作 Py2 规则执行),而你本地用的是 Python 3.13。
: 在 Python 2 里,两个 int 相除用 / 会做整数除法,结果会被截断成整数;而 Python 3 的 / 是真除法,会得到浮点数。
: 你的这行在偶数总长度时会出问题(在 Py2 环境):
: return ((max(currA, currB) + min(afterA, afterB)) / 2)
: ............
好的。其实有询问过chatgpt,但是它似乎陷入了幻觉,反复重复一些明显不相关的回答,没能解决我的困惑。不过还是谢谢你的建议
【 在 ykprocess 的大作中提到: 】
: 你的当务之急,是学会问ai
确实好用!我也在用pycharm的插件写
【 在 wy2022210528 的大作中提到: 】
: 一直用py3就好,90%的问题可以解决
: 可以在vscode安装leetcode插件刷题,亲测好用