zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    @bzoj
    @hdu
    @noi.ac
    @noi.ac
    @noi.ac
    jsp include page指令标记
    javascript 对象(DOM)document window history
    HTML 标准属性 和 事件属性
    html 特殊字符 fmt table A
    mysql 启动 导入sql文件
  • 原文地址:https://www.cnblogs.com/andrew-chen/p/10160599.html
Copyright © 2011-2022 走看看