首页 > 其他 > 详细

Median of Two Sorted Array

时间:2014-04-13 14:42:59      阅读:415      评论:0      收藏:0      [点我收藏+]

利用分治算法的Merge算法,算法的复杂度应该是merge算法的一半,虽然leetcode显示Accepted,但是时间复杂度应该没有满足。时间复杂度为:O((n+m)/2)

bubuko.com,布布扣
 1 class Solution {
 2 public:
 3     double findMedianSortedArrays(int A[], int m, int B[], int n) {
 4         int a=0,b=0,temp=0;
 5         if((m+n)%2==1)
 6         {
 7             while((a+b)<=(m+n-1)/2)
 8             {
 9                 if((A[a]<=B[b]&&a<m)||b>=n)
10                 {
11                     temp=A[a];
12                     a++;
13                 }
14                 else
15                 {
16                     temp=B[b];
17                     b++;
18                 }
19             }
20             return temp;
21         }
22         else
23         {
24              int temp1=0, temp2=0;
25              while((a+b)<=(m+n)/2)
26             {
27                 if((a<m&&A[a]<=B[b])||b>=n)
28                 {
29                     temp2=A[a];
30                     if((a+b)==(m+n-2)/2)
31                         temp1=temp2;
32                     a++;
33                 }
34                 else
35                 {
36                     temp2=B[b];
37                     if((a+b)==(m+n-2)/2)
38                         temp1=temp2;
39                     b++;
40                 }
41                 
42             }
43             return (double)(temp1+temp2)/2;
44         }
45     }
46 };
bubuko.com,布布扣

以下算法是网上看到的,时间复杂度为O(nlog2(n))

bubuko.com,布布扣
 1 class Solution {
 2 public:
 3     double findMedianSortedArrays(int A[], int m, int B[], int n) {
 4         // Start typing your C/C++ solution below
 5         // DO NOT write int main() function
 6         int *a=new int[m+n];
 7         
 8         memcpy(a,A,sizeof(int)*m);
 9         memcpy(a+m,B,sizeof(int)*n);
10         
11         sort(a,a+n+m);
12         
13         double median=(double) ((n+m)%2? a[(n+m)>>1]:(a[(n+m-1)>>1]+a[(n+m)>>1])/2.0);
14         
15         delete a;
16         
17         return median;
18     }
19 };
bubuko.com,布布扣

网上说的最好的算法,O(log(m+n))

bubuko.com,布布扣
 1 class Solution {
 2 public:
 3     double findKth(int A[], int m, int B[], int n, int k)
 4     {
 5         //m is equal or smaller than n
 6         if (m > n)
 7             return findKth(B, n, A, m, k);
 8         if (m == 0)
 9             return B[k-1];
10         if (k <= 1)
11             return min(A[0], B[0]);
12 
13         int pa = min(k / 2, m), pb = k - pa;
14         if (A[pa-1] < B[pb-1])
15         {
16             return findKth(A + pa, m - pa, B, n, k - pa);
17         }
18         else if(A[pa-1] > B[pb-1])
19         {
20             return findKth(A, m, B + pb, n - pb, k - pb);
21         } else
22             return A[pa-1];
23     }
24 
25     double findMedianSortedArrays(int A[], int m, int B[], int n) {
26         // Start typing your C/C++ solution below
27         // DO NOT write int main() function
28         int k = m + n;
29         if (k & 0x1)
30         {
31             return findKth(A, m, B, n, k / 2 + 1);
32         } else
33         {
34             return (findKth(A, m, B, n, k / 2) + findKth(A, m, B, n, k / 2 + 1)) / 2;
35         }
36     }
37 };
bubuko.com,布布扣

 

Median of Two Sorted Array,布布扣,bubuko.com

Median of Two Sorted Array

原文:http://www.cnblogs.com/cnstudy/p/3660165.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!