LeetCode[One hard A Day] - Median of Two Sorted Arrays

Meidan of Two Sorted Array

算法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]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值