Leetcode python的浮点数和本地输出结果不同?

背景:

众所周知,在python里是不需要声明变量类型的,非常方便。比起舍友的java写起来快多了。

但是有时候不声明变量还是会有一些小问题的

意识到这个情况是leetcode的第四题

leetcode 和 本地pycharm的输出结果不一样

(第四题,二分查找的方法我还没写完,所以先不放链接了,这里我之后会补上)

是寻找两个正序数组的中位数。显然如果说,数组的长度为偶数,那么最后就需要求一个均值。

因为我平时多半会在pycharm进行调试,然后问题就出现了。

(这里我省去了代码的内容,只是把他作为一个测试的载体)

按照代码最后返回的应该是2,3的中位数

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        a = 2
        b = 3
        return  (a+b)/2

答案在leetcode里是2.00000

相同的代码在pycharm里面却是

感觉上就很像leetcode的数值类型没有转过来

原因:

然后我又print了他们的数值类型之后我就有了结果。

pycharm:

leetcode:

相比pycharm leetcode 的编译器不会自动帮你把数据类型个转成float,也就有可能造成尾数丢失。

至于为什么输出的时候又是2.00000的,应该是因为函数

findMedianSortedArrays()->float 是不是在调用的时候指定了输出类型?

这样的错误在leetcode的官方题解里也出现了

return (getKthElement(totalLength // 2) + getKthElement(totalLength // 2 + 1)) / 2

应该将其改为

return (float(getKthElement(totalLength // 2)) + float(getKthElement(totalLength // 2 + 1))) / 2

 就可以了

解决方法:

最开始就直接把要做计算的两个整型转为float就好了。如果是leetcode第四题就是这样

return new[len(new) // 2] if (len(new) % 2 == 1) else (float(new[len(new) // 2]) + float(new[len(new) // 2]-1))/2

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值