码迷,mamicode.com
首页 > 编程语言 > 详细

求两个有序数组的中位数

时间:2015-08-19 20:29:16      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:求两个有序数组的中位数

1 题目

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find themedian of the two sorted arrays. The overall run time complexity should beO(log (m+n)).

2 分析

若m+n为奇数则中位数(median)排好序后的中间值,若为偶数则中位数只的是中间两个数的平均值。

题目中要求时间复杂度为O(log(m+n)),显然可以用分治的思想求解。

3 实现

int findKth(vector<int>&num1, int begin1, int end1, vector<int> &num2, int begin2, intend2, int k);
doubleSolution::findMedianSortedArrays(vector<int> &num1, vector<int>&num2)
{
      int m = num1.size();
      int n = num2.size();
      if ((m + n) & 0x1)
      {
             return findKth(num1, 0, m - 1,num2, 0, n - 1, (m + n) / 2);
      }
      else
      {
             return (findKth(num1, 0, m - 1,num2, 0, n - 1, (m + n) / 2 - 1) +
                    findKth(num1, 0, m - 1,num2, 0, n - 1, (m + n) / 2)) / 2.0;
      }
}
 
int findKth(vector<int>&num1, int begin1, int end1, vector<int> &num2, int begin2, intend2, int k)
{
      int m = end1 - begin1 + 1;
      int n = end2 - begin2 + 1;
      if (m > n)
      {
             return findKth(num2, begin2, end2,num1, begin1, end1, k);
      }
 
      if (0 == m)
      {
             return num2[begin2 + k];
      }
      if (0 == k)
      {
             return min(num1[begin1],num2[begin2]);
      }
 
      int middle1 = min((begin1 + end1) / 2, k +begin1);
      int middle2 = begin2 + (k - (middle1 -begin1 + 1));
 
      if (middle2 < begin2)
      {
             ++middle2;
             --middle1;
      }
 
      if (num1[middle1] < num2[middle2])
      {
             return findKth(num1, middle1 + 1,end1, num2, begin2, end2, k - (middle1 - begin1 + 1));
      }
      else if (num1[middle1] > num2[middle2])
      {
             return findKth(num1, begin1, end1,num2, middle2 + 1, end2, k - (middle2 - begin2 + 1));
      }
      else
      {
             return num1[middle1];
      }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

求两个有序数组的中位数

标签:求两个有序数组的中位数

原文地址:http://blog.csdn.net/woniu317/article/details/47785935

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!