Leetcode : Median of Two Sorted Arrays

 

 

 

做这题花了四个小时,学习到了使用二分查找,代码可以扩展至“在两个有序数组中找到第K个元素”。

因为有O(log(m+n))的要求,我们不能简单使用扫描数组然后取中位数的形式,这要求我们使用复杂度为log(n) 的二分查找。

梳理题目条件:不考虑特殊情况,且假设nums1 元素个数 小于 nums2,nums1 有n1个元素, nums2有n2个元素,k为 (n1 + n2 + 1) / 2,若数组为偶数个,则中位数为C[k-1],若为奇数个, 则中位数为C[k-1]和C[k] 取平均数。

我们从nums1中取m1个元素,nums2中自然取m2个元素,使得m1 + m2 = k 成立,其中k为 (n1 + n2 + 1) / 2。

二分查找要找的数应当是下图中最小的m1, 使得A[m1] > B[m2 - 1]。理由是: A[m1] 是nums1中下一个将被取到的数,B[m2 - 1] 是 nums2中最后一个取到的数,如果小了,说明nums1还要多取。

 

 

 

 

用例子来说明

 

代码:https://github.com/chy996633/leetcode/blob/master/src/MedianOfTwoSortedArrays.java 

 

posted @ 2018-12-22 12:16  andrew-chen  阅读(133)  评论(0编辑  收藏  举报