LeetCode题解——Median of Two Sorted Arrays
2014-06-01 15:16
519 查看
题目:
找两个排序数组A[m]和B
的中位数,时间复杂度为O(log(m+n))。
解法:
更泛化的,可以找第k个数,然后返回k=(m+n)/2时的值。
代码:
找两个排序数组A[m]和B
的中位数,时间复杂度为O(log(m+n))。
解法:
更泛化的,可以找第k个数,然后返回k=(m+n)/2时的值。
代码:
class Solution { public: double findMedianSortedArrays(int A[], int m, int B[], int n) { int total = m + n; if(total & 0x1) //总数为奇数,返回中位数 return (double)findKthSortedArrays(A, m, B, n, total/2 + 1); else //总数为偶数,返回中间两个数的平局值 return (findKthSortedArrays(A, m, B, n, total/2) + findKthSortedArrays(A, m, B, n, total/2 + 1)) / 2.0; } private: int findKthSortedArrays(int A[], int m, int B[], int n, int k) { if( m > n ) //保证第一个数组比第二个短 return findKthSortedArrays(B, n, A, m, k); if( m == 0 ) //短数组为空 return B[k - 1]; if( k == 1 ) //求第1个元素 return min(A[0], B[0]); int ia = min(k/2, m), ib = k - ia; //比较各自的第k/2个元素,如果短数组长度小于k/2则用最后一个元素来做比较,B数组也相应调整比较的元素 if( A[ia - 1] > B[ib - 1] ) //短数组的大,那个短数组的右边部分必然排在第k之后,同理长数组左边的部分必然都在第k之前 return findKthSortedArrays(A, ia, B + ib, n - ib, k - ib); else if( A[ia - 1] < B[ib - 1] ) return findKthSortedArrays(A + ia, m - ia, B, ib, k - ia); else return A[ia - 1]; //如果相等则找到 } };
相关文章推荐
- [LeetCode]题解(python):004-Median of Two Sorted Arrays
- leetcode题解-4. Median of Two Sorted Arrays
- LeetCode题解--4. Median of Two Sorted Arrays
- [Leetcode题解]004 Median of Two Sorted Arrays
- [LeetCode题解004]Median of Two Sorted Arrays
- leetcode题解||Median of Two Sorted Arrays问题
- LeetCode题解系列--4. Median of Two Sorted Arrays
- LeetCode题解-4-Median of Two Sorted Arrays
- LeetCode题解-----Median of Two Sorted Arrays
- Leetcode题解 - 4. Median of Two Sorted Arrays
- LeetCode题解(Golang实现)--Median of Two Sorted Arrays
- LeetCode: Median of Two Sorted Arrays
- LeetCode题目笔记(三) -- Median of Two Sorted Arrays
- LeetCode 4 - Median of Two Sorted Arrays
- [leetcode] Median of Two Sorted Arrays
- [LeetCode] Median of Two Sorted Arrays 解题报告
- leetcode 26: Median of Two Sorted Arrays
- [leetcode]Median of Two Sorted Arrays
- LeetCode: Median of Two Sorted Arrays
- LeetCode刷题笔录 Median Of Two Sorted Arrays