Hard-题目50:4. Median of Two Sorted Arrays

转载 2016年05月31日 23:55:20

题目原文:
There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
题目大意:
求两个排序好的数组合并起来的中位数。
题目分析:
这是一道经典题,那也用经典的代码解决。,
这个findKth()函数写的非常精彩,几乎所有的博文用的都是这个函数。思路如下:
1. 保持A是短的那一个数组,B是长的
2. 平分k, 一半在A,一半在B (如果A的长度不足K/2,那就pa就指到最后一个)
3. 如果pa的值 < pb的值,那证明第K个数肯定不会出现在pa之前,递归,把A数组pa之前的砍掉,同理递归砍B数组。
4. 递归到 m == 0 (短的数组用完了) 就返回 B[k - 1], 或者k == 1(找第一个数)就返回min(A第一个数,B第一个数)。
不过直接把网上的经典代码丢进去会Compile Error,经过我的简单改装,得到了可以直接用的ac代码
源码:(language:c)

#define min(a,b) a<b?a:b
double findKth(int *a, int m, int *b, int n, int k)  
{  
    //always assume that m is equal or smaller than n  
    if (m > n)  
        return findKth(b, n, a, m, k);  
    if (m == 0)  
        return b[k - 1];  
    if (k == 1)  
        return min(a[0], b[0]);  
    //divide k into two parts  
    int pa = min(k / 2, m), pb = k - pa;  
    if (a[pa - 1] < b[pb - 1])  
        return findKth(a + pa, m - pa, b, n, k - pa);  
    else if (a[pa - 1] > b[pb - 1])  
        return findKth(a, m, b + pb, n - pb, k - pb);  
    else  
        return a[pa - 1];  
}  
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
    int total = nums1Size + nums2Size;  
    if (total%2)  
        return findKth(nums1, nums1Size, nums2, nums2Size, total / 2 + 1);  
    else  
        return (findKth(nums1, nums1Size, nums2, nums2Size, total / 2)  
                + findKth(nums1, nums1Size, nums2, nums2Size, total / 2 + 1)) / 2;  
}

成绩:
20ms,66.18%,24ms,44.85%
cmershen的碎碎念:
这道题属于比较老的经典题,这个findKth算法又很具有普遍性(寻找两个数组中第k大的数)应该是面试的重点,且此题应该也是难点。

leetcode: 4. Median of Two Sorted Arrays (java)

题目链接:https://leetcode.com/problems/median-of-two-sorted-arrays/ 题目: There are two sorted arrays nu...
  • j754379117
  • j754379117
  • 2016年06月20日 20:44
  • 561

《LeetBook》leetcode题解(4): Median of Two Sorted Arrays[H]——两个有序数组中值问题

004. Median of Two Sorted Arrays[H]Median of Two Sorted ArraysH 题目 分析 思路1 思路2 预备知识 先解释下割 双数组找第k个元素 我...
  • hk2291976
  • hk2291976
  • 2016年04月09日 21:24
  • 2725

leetcode之 median of two sorted arrays

这是我做的第二个leetcode题目,一开始以为和第一个一样很简单,但是做的过程中才发现这个题目非常难,给人一种“刚上战场就踩上地雷挂掉了”的感觉。后来搜了一下leetcode的难度分布表(leetc...
  • yutianzuijin
  • yutianzuijin
  • 2013年09月10日 00:15
  • 78610

两个有序数组的中位数Median of Two Sorted Arrays(很重要)

https://leetcode.com/problems/median-of-two-sorted-arrays/ 对于一个长度为n的已排序数列a,若n为奇数,中位数为a[n / 2 + 1]...
  • gao1440156051
  • gao1440156051
  • 2016年06月21日 11:11
  • 3712

leetcode04-Median of Two Sorted Arrays-python

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two...
  • summerdj
  • summerdj
  • 2016年03月31日 15:11
  • 791

LeetCode(4)Median of Two Sorted Arrays

题目There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the t...
  • fly_yr
  • fly_yr
  • 2015年08月22日 20:35
  • 1213

leetcode之Median of Two Sorted Arrays问题

问题描述: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of t...
  • xu2645318400
  • xu2645318400
  • 2017年06月29日 18:49
  • 170

Median of Two Sorted Arrays 两个有序数组的中位数@LeetCode

超级难的一道题,线性时间复杂度好做,就是merge。 但是对数复杂度,就要用到很多数学分析,实际上就是要找到第k小的元素。 翻遍了网络,觉得还是这一篇讲的最详细,而且写得代码最容易转为Java,因为J...
  • hellobinfeng
  • hellobinfeng
  • 2013年12月16日 13:52
  • 4686

LeetCode 第二题,Median of Two Sorted Arrays

题目再现 There are two sorted arrays A and B of size m and n respectively. Find the median of the two so...
  • hu1020935219
  • hu1020935219
  • 2014年08月02日 17:18
  • 2281

leetcode 4. Median of Two Sorted Arrays O(log(m+n))解法

4. Median of Two Sorted Arrays   Question Editorial Solution  My Submissions ...
  • yuxin6866
  • yuxin6866
  • 2016年09月03日 20:21
  • 740
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hard-题目50:4. Median of Two Sorted Arrays
举报原因:
原因补充:

(最多只允许输入30个字)