andrew-chen

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 on 2018-12-22 12:16 andrew-chen 阅读(...) 评论(...) 编辑 收藏

分类:

技术点:

相关文章:

  • 2021-06-14
  • 2021-07-09
  • 2021-11-09
  • 2021-09-02
  • 2021-04-14
  • 2021-12-18
猜你喜欢
  • 2018-04-04
  • 2021-04-14
  • 2021-12-14
  • 2021-10-17
  • 2021-11-22
  • 2021-04-28
  • 2022-01-12
相关资源
相似解决方案