两个排序数组的中位数-以下代码有什么问题?

时间:2019-09-03 03:09:15

标签: python algorithm

我已经花了几个小时调试以下代码,但是我仍然无法弄清楚真正在哪里破坏了它。我感觉是ai+bi<=k导致错误的原因,但我不知道如何解决。有人可以帮忙吗?

这是我的代码:

class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        m, n = len(nums1), len(nums2)
        mid1 = (m+n+1)//2
        mid2 = (m+n+2)//2
        return (self.getKth(nums1, nums2, mid1)+self.getKth(nums1, nums2, mid2))/2

    # k one-indexed
    def getKth(self, a, b, k):
        if not a:
            return b[k-1]
        if not b:
            return a[k-1]
        ai, bi = (len(a)+1)//2, (len(b)+1)//2
        ae, be = a[ai-1], b[bi-1]

        if ai+bi<=k:
            if ae<be:
                return self.getKth(a[ai:], b, k-ai)
            else:
                return self.getKth(a, b[bi:], k-bi)
        else:
            if ae<be:
                return self.getKth(a, b[:bi], k)
            else:
                return self.getKth(a[:ai], b, k)

问题: https://leetcode.com/problems/median-of-two-sorted-arrays/submissions/

相似解(k从零开始): https://leetcode.com/problems/median-of-two-sorted-arrays/discuss/2511/Intuitive-Python-O(log-(m%2Bn))-solution-by-kth-smallest-in-the-two-sorted-arrays-252ms

1 个答案:

答案 0 :(得分:1)

该错误位于else子句中。应该是这样的:

        if ae<be:
            return self.getKth(a, b[:bi-1], k)
        else:
            return self.getKth(a[:ai-1], b, k)

您需要使用与以下行中相同的索引:

    ae, be = a[ai-1], b[bi-1]