Median of Two Sorted Arrays

来源:互联网 发布:key查看器软件 编辑:程序博客网 时间:2024/06/06 15:02

There are two sorted arrays A and B 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)).


class Solution {public:double findMedianSortedArrays(int A[], int m, int B[], int n) {int count=0,i=0,j=0;int mid1 = 0,mid2=0;if((m+n)<=2){if(m==0 && n==0)return 0;else if((m+n)==1){if(m==0)return B[0];elsereturn A[0];}else if((m+n)==2){if(m==0)return (B[0]+B[1])/2.0;else if(n==0)return (A[0]+A[1])/2.0;elsereturn (A[0]+B[0])/2.0;}}else if(m==0){if(n%2==0)return (B[n/2-1]+B[n/2])/2.0;elsereturn B[n/2];}else{for(i=0;i<m;){if(j<n){if(A[i]<=B[j]){++count;if(count==(m+n)/2)mid1 = A[i]; if(count==((m+n)/2+1))mid2 = A[i];++i;}}else{++count;if(count==(m+n)/2)mid1 = A[i]; if(count==((m+n)/2+1))mid2 = A[i];++i;}for(;j<n;){if(i<m){if(A[i]>B[j]){++count;if(count==(m+n)/2)mid1 = B[j]; if(count==((m+n)/2+1))mid2 = B[j];++j;}elsebreak;}else{++count;if(count==(m+n)/2)mid1 = B[j]; if(count==((m+n)/2+1))mid2 = B[j];++j;}}}}if((m+n)%2==0)return (mid1+mid2)/2.0;elsereturn mid2;}};

For now,it is not so complicated as I saw it for the first time.Just use a counter and two pointer that points the array respectively,the counter stands for  number in the count place and the pointer point the current element.It is worth mentioning that we have to consider the special situation(when the array is empty),and the index is always one less than the number.

0 0