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><Hard> 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...
  • awsxsa
  • awsxsa
  • 2015年11月23日 16:29
  • 292

4. Median of Two Sorted Arrays (Hard)

原题目:   There are two sorted arrays nums1 and nums2 of size m and n respectively.   Find the median...

LeetCode 题目 4. Median of Two Sorted Arrays

题目原址 :点击打开链接   题目描述: There are two sorted arrays nums1 and nums2 of size m and n respectively...

【python】【leetcode】【算法题目4—Median of Two Sorted Arrays】

【python】【leetcode】【算法题目4—Median of Two Sorted Arrays】 题目原文: There are two sorted arrays nums1 and nu...

LeetCode刷题(C++)——Median of Two Sorted Arrays(Hard)

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the tw...

LeetCode题目笔记(三) -- Median of Two Sorted Arrays

Problem: Median of Two Sorted Arrays (979/5373 -- 18%) Problem Description: There are two sorted ...

leetcode——finding Median of Two Sorted Arrays题目分析

leetcode上面有道“Median of Two Sorted Arrays”关于求中位数的题目,时间复杂度要求为O(log (m+n)),因此正好在本文梳理下关于 求中位数的方法。 规则: ...

4_Median_of_Two_Sorted_Arrays

LeetCode 4, 2016-11-12

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
  • 1125

LeetCode (4)Median of Two Sorted Arrays

(4)Median of Two Sorted Arrays题目:两个已经排好序的数组nums1和nums2,大小分别为m和n,求两个已排数组中位数。总运行时间复杂度应该是O(log(m+n))。用例...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hard-题目50:4. Median of Two Sorted Arrays
举报原因:
原因补充:

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