背景:
众所周知,在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