我已经花了几个小时调试以下代码,但是我仍然无法弄清楚真正在哪里破坏了它。我感觉是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/
答案 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]