算法1(并非最优解):可以将 median 转化为第k小的数of two sorted arrays。(此处k为泛指,下面k为两个array size和)
如果array size为双数,median为 (第k/2小+第(k/2+1)小)/2。For example, array size = 4, median = (第2小+第3小)/2.
如果array size为单数,median为 第(k/2+1)小。For example, array size = 5, median = 第3小。
如何找到第k小的数:
Recursion
假设两个array的size都不小于k/2,所以nums1[k/2-1] and nums2[k/2-1]都存在。我们先比较nums1[k/2-1] and nums2[k/2-1] (-1 is the offset for the 0-based index), 我们会得到如下3种情况:
1.nums1[k/2-1] < nums2[k/2-1]
如果有如上不等式,我们可以肯定的是nums1[k/2-1] < 第k小的数。证明1: 在现有的条件下,我们让nums1[k/2-1]尽量的大。nums1[k/2-1]前面有k/2-1个数,nums2[k/2-1]相同,所以nums1[k/2-1] and nums2[k/2-1]前面共有2*(k/2-1) = k-2个数。然后已知nums1[k/2-1] < nums2[k/2-1],还要让nums1[k/2-1]尽量的大,nums2[k/2-1]也要尽量的大。所以nums2[k/2-1]最大就为第k小的数,nums1[k/2-1]最大就为第k-1小的数,nums1[k/2-1]还是小于第k小的数。证明2(反证法): 假设nums1[k/2-1] > 第k小的数,假设其为第k+1小的数。由于nums1[k/2-1] < nums2[k/2-1], nums2[k/2-1]至少是(k+2)最小的数。nums1[k/2-1]前面有k/2-1个数,nums2[k/2-1]相同,所以nums1[k/2-1] and nums2[k/2-1]前面共有2*(k/2-1) = k-2个数。我们可以得到nums1[k/2-1]前面最多只有k-2个数,这与nums1[k/2-1]是第k+1最小矛盾。
2.nums2[k/2-1] < nums1[k/2-1]
同上论证我们可得nums2[k/2-1]