Python 如何找到两个排序数组之间的中间值?

Python 如何找到两个排序数组之间的中间值?,python,arrays,algorithm,Python,Arrays,Algorithm,我正在研究一个竞争性编程问题,我们试图找到两个排序数组的中值。最佳算法是执行二进制搜索并识别两个数组之间的拆分点,i和j 我自己很难得出解决方案。我不明白最初的逻辑。我将了解到目前为止我对这个问题的看法 中值的概念是将给定的数组分成两组。在假设两个给定数组合并后,假设假设左>代码>数组和假设右数组。这两个数组的长度相同 我们知道,给定这两个假设数组的中值计算结果是[max(左)+min(右)]/2。到目前为止,这是有道理的。但是现在的问题是知道如何构造左和右数组 我们可以在ArrayAasi上选

我正在研究一个竞争性编程问题,我们试图找到两个排序数组的中值。最佳算法是执行二进制搜索并识别两个数组之间的拆分点,
i
j

我自己很难得出解决方案。我不明白最初的逻辑。我将了解到目前为止我对这个问题的看法

中值的概念是将给定的数组分成两组。在假设两个给定数组合并后,假设假设<代码>左>代码>数组和假设<代码>右<代码>数组。这两个数组的长度相同

我们知道,给定这两个假设数组的中值计算结果是
[max(左)+min(右)]/2
。到目前为止,这是有道理的。但是现在的问题是知道如何构造
数组

我们可以在
ArrayA
as
i
上选择一个拆分点,在
ArrayB
as
j
上选择一个拆分点。请注意
len(ArrayB[:j]+ArrayB[:i])==len(ArrayB[j:][ArrayB[i:])

现在我们只需要找到切入点。我们可以尝试所有拆分点
i
j
,以使它们满足中值条件。然而,结果是
O(m*n),其中m是ArrayB的大小,其中n是ArrayA的大小


我不知道如何使用我的思路获得二进制搜索解决方案。如果有人能给我指点,那就太棒了。

这是我设法想出的方法

首先,我们知道结果数组将包含N+M元素,这意味着左侧部分将包含(N+M)/2元素,右侧部分也将包含(N+M)/2元素。让我们将结果数组表示为Ans,并将其中一个部分的大小表示为PartSize

对数组a执行二进制搜索操作。这种二进制搜索的范围将是[0N]。此二进制搜索操作将帮助您确定数组A中构成结果数组左侧部分的元素数

现在,假设我们正在测试值i。如果数组A中的i元素应该包含在结果数组的左侧,这意味着j=PartSize-i元素也必须包含在第一部分中的数组B中。我们有以下几种可能性:

  • j>M这是一种无效状态。在这种情况下,这意味着我们仍然需要从数组A中选择更多的元素,因此我们新的二进制搜索范围变为[i+1N]


  • j?我有点明白了。从搜索I和j坐标的O(n*m)解到O(lgN)解有困难,我可以把它简化为一个线性扫描。我们只需要找到i,因为j可以表示为i加上我们给定的一些常数。我正在努力理解这种方法的正确性。我们如何确定这样一个
    i
    总是存在并且存在一个独特的呢?冷静的思考过程。谢谢你的回复!不客气。如果这是你要找的,请考虑把它标记为你的问题的答案。