median of two sorted arrays
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(int A[], int m, int B[], int n) 24 { 25 int total = m + n; 26 if (total & 0x1) 27 return findKth(A, m, B, n, total / 2 + 1); 28 else 29 return (findKth(A, m, B, n, total / 2) 30 + findKth(A, m, B, n, total / 2 + 1)) / 2; 31 } 32 };
posted on 2013-09-06 19:54 jumping_grass 阅读(158) 评论(0) 收藏 举报
浙公网安备 33010602011771号