4.Median of Two Sorted Arrays

Posted NULL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.Median of Two Sorted Arrays相关的知识,希望对你有一定的参考价值。

本题我最开始的思路是,将两数组合并后排序,找出中位数返回。不过很明显是超时的。

下面是我在http://blog.csdn.net/yutianzuijin/article/details/11499917看到的思路:

首先假设数组A和B的元素个数都大于k/2,我们比较A[k/2-1]和B[k/2-1]两个元素,这两个元素分别表示A的第k/2小的元素和B的第k/2小的元素。这两个元素比较共有三种情况:>、<和=。如果A[k/2-1]<B[k/2-1],这表示A[0]到A[k/2-1]的元素都在A和B合并之后的前k小的元素中。换句话说,A[k/2-1]不可能大于两数组合并之后的第k小值,所以我们可以将其抛弃。

当A[k/2-1]>B[k/2-1]时存在类似的结论。

当A[k/2-1]=B[k/2-1]时,我们已经找到了第k小的数,也即这个相等的元素,我们将其记为m。由于在A和B中分别有k/2-1个元素小于m,所以m即是第k小的数。(这里可能有人会有疑问,如果k为奇数,则m不是中位数。这里是进行了理想化考虑,在实际代码中略有不同,是先求k/2,然后利用k-k/2获得另一个数。)

通过上面的分析,我们即可以采用递归的方式实现寻找第k小的数。此外我们还需要考虑几个边界条件:

  • 如果A或者B为空,则直接返回B[k-1]或者A[k-1];
  • 如果k为1,我们只需要返回A[0]和B[0]中的较小值;
  • 如果A[k/2-1]=B[k/2-1],返回其中一个;
 1 double findKth(int a[], int m, int b[], int n, int k)  
 2 {  
 3     //always assume that m is equal or smaller than n  
 4     if (m > n)  
 5         return findKth(b, n, a, m, k);  
 6     if (m == 0)  
 7         return b[k - 1];  
 8     if (k == 1)  
 9         return min(a[0], b[0]);  
10     //divide k into two parts  
11     int pa = min(k / 2, m), pb = k - pa;  
12     if (a[pa - 1] < b[pb - 1])  
13         return findKth(a + pa, m - pa, b, n, k - pa);  
14     else if (a[pa - 1] > b[pb - 1])  
15         return findKth(a, m, b + pb, n - pb, k - pb);  
16     else  
17         return a[pa - 1];  
18 }  
19   
20 class Solution  
21 {  
22 public:  
23     double findMedianSortedArrays(vector<int>& A, vector<int>& B)  
24     {  
25         int m = A.size();
26         int n = B.size();
27         int a[100000],b[100000];
28         int total = m + n;
29         for(int i = 0;i < m;i ++)
30             a[i] = A[i];
31         for(int i = 0;i < n;i ++)
32             b[i] = B[i];
33         if (total % 2 != 0)  
34             return findKth(a, m, b, n, total / 2 + 1);  
35         else  
36             return (findKth(a, m, b, n, total / 2)  
37                     + findKth(a, m, b, n, total / 2 + 1)) / 2;  
38     }  
39 };  

以上是关于4.Median of Two Sorted Arrays的主要内容,如果未能解决你的问题,请参考以下文章

4. Median of Two Sorted Arrays

4. Median of Two Sorted Arrays

4. Median of Two Sorted Arrays

4. Median of Two Sorted Arrays

4. Median of Two Sorted Arrays

4. Median of Two Sorted Arrays