Leetcode | Median of Two Sorted Arrays
2014-05-09 13:06
447 查看
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)).
第一次看到的时候做不出来,看了答案之后到今天重做,还是不会。
整体思路就是把求中位数转换为求在两个sorted array里求第k个数。如果(m+n)%2=0,那么就是求第m + n) / 2和第m + n) / 2 + 1个数的平均数。
如果(m+n)%2!=0,那么就是求第m + n) / 2 + 1个数。
如图,如果m/2+n/2+1>=k的时候,那么第k个数一定是在sec1,sec3之中或者A[m/2],A[n/2]。此时如果A[m/2]>=B[n/2],那么第k个数一定不在sec2中。(因为在sec2中的数已经比sec1和sec3都大了。)如果A[m/2]<B[n/2],那么第k个数一定不在sec4中。
如果m/2+n/2+1<k,那么第k个数不可能在sec1或者sec3中。如果A[m/2]<B[n/2],那么第k个数一定不在sec1。如果A[m/2]>=B[n/2],第k个数一定不在sec3。
当m=0时,也就是A为空,那么第k个数一定是B的第一个。n=0同理。
当k=1时,也就是说第一个数,那么就是两个sorted array第一个项的最小值。
第一次看到的时候做不出来,看了答案之后到今天重做,还是不会。
整体思路就是把求中位数转换为求在两个sorted array里求第k个数。如果(m+n)%2=0,那么就是求第m + n) / 2和第m + n) / 2 + 1个数的平均数。
如果(m+n)%2!=0,那么就是求第m + n) / 2 + 1个数。
如图,如果m/2+n/2+1>=k的时候,那么第k个数一定是在sec1,sec3之中或者A[m/2],A[n/2]。此时如果A[m/2]>=B[n/2],那么第k个数一定不在sec2中。(因为在sec2中的数已经比sec1和sec3都大了。)如果A[m/2]<B[n/2],那么第k个数一定不在sec4中。
如果m/2+n/2+1<k,那么第k个数不可能在sec1或者sec3中。如果A[m/2]<B[n/2],那么第k个数一定不在sec1。如果A[m/2]>=B[n/2],第k个数一定不在sec3。
当m=0时,也就是A为空,那么第k个数一定是B的第一个。n=0同理。
当k=1时,也就是说第一个数,那么就是两个sorted array第一个项的最小值。
class Solution { public: double findMedianSortedArrays(int A[], int m, int B[], int n) { if ((m + n) %2 == 0) { return (getKthNum(A, m, B, n, (m + n) / 2) + getKthNum(A, m, B, n, (m + n) / 2 + 1)) / 2.0; } else { return getKthNum(A, m, B, n, (m + n) / 2 + 1); } } int getKthNum(int A[], int m, int B[], int n, int k) { if (m <= 0) return B[k - 1]; if (n <= 0) return A[k - 1]; if (k <= 0) return min(A[0], B[0]); if (m / 2 + n / 2 + 1 >= k) { if (A[m / 2] >= B[n / 2]) { return getKthNum(A, m / 2, B, n, k); } else { return getKthNum(A, m, B, n / 2, k); } } else { if (A[m / 2] >= B[n / 2]) { return getKthNum(A, m, B + n / 2 + 1, n - n / 2 - 1, k - n / 2 - 1); } else { return getKthNum(A + m / 2 + 1, m - m / 2 - 1, B, n, k - m / 2 - 1); } } } };
相关文章推荐
- leetcode 4: Median of Two Sorted Arrays
- [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)
- leetcode—Median of Two Sorted Arrays
- Median of Two Sorted Arrays (找两个序列的中位数,O(log (m+n))限制) 【面试算法leetcode】
- Leetcode题解 - 4. Median of Two Sorted Arrays
- LeetCode解题-#4-Median of Two Sorted Arrays
- [LeetCode]题解(python):004-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 4 Median of Two Sorted Arrays
- leetcode Median of Two Sorted Arrays
- 4.Median of Two Sorted Arrays Leetcode Python
- 2017-09-07 LeetCode_004 Median of Two Sorted Arrays
- [leetcode]Median of Two Sorted Arrays
- [Leetcode] Median of Two Sorted Arrays
- 【leetcode】Array—— Median of Two Sorted Arrays(4)
- LeetCode - 4 - Median of Two Sorted Arrays(两排序数组找第k大)
- [LeetCode.Trick]Median of Two Sorted Arrays
- LeetCode 150 Median of Two Sorted Arrays