利用分治算法的Merge算法,算法的复杂度应该是merge算法的一半,虽然leetcode显示Accepted,但是时间复杂度应该没有满足。时间复杂度为:O((n+m)/2)
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 };
以下算法是网上看到的,时间复杂度为O(nlog2(n))
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 };
网上说的最好的算法,O(log(m+n))
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 };
Median of Two Sorted Array,布布扣,bubuko.com
原文:http://www.cnblogs.com/cnstudy/p/3660165.html