LeetCode Median of Two Sorted Arrays
2013-11-29 21:07
288 查看
/article/8793193.html这篇博客上的想法是错的。
虽说在优化思想上是对的,但其对median的理解就是错的,判断时要判断中位数是否想等,而不是只是简单的除2.我的思路是对的,但是这么做的话,很复杂。因为用中位数来判断是否相等,还要对中位数取整用作索引,最麻烦的是要不断改两个数组的起始索引和结束索引。
下面的方法,从最小k的角度进行分析,代码为证,真是漂亮。/article/1536805.html
都可以排除了(因为这些都是小于第k大的)。
虽说在优化思想上是对的,但其对median的理解就是错的,判断时要判断中位数是否想等,而不是只是简单的除2.我的思路是对的,但是这么做的话,很复杂。因为用中位数来判断是否相等,还要对中位数取整用作索引,最麻烦的是要不断改两个数组的起始索引和结束索引。
下面的方法,从最小k的角度进行分析,代码为证,真是漂亮。/article/1536805.html
double findKth(int a[], int m, int b[], int n, int k) { //always assume that m is equal or smaller than n if (m > n) return findKth(b, n, a, m, k); if (m == 0) return b[k - 1]; if (k == 1) return min(a[0], b[0]); //divide k into two parts int pa = min(k / 2, m), pb = k - pa; if (a[pa - 1] < b[pb - 1]) return findKth(a + pa, m - pa, b, n, k - pa); else if (a[pa - 1] > b[pb - 1]) return findKth(a, m, b + pb, n - pb, k - pb); else return a[pa - 1]; } class Solution { public: double findMedianSortedArrays(int A[], int m, int B[], int n) { int total = m + n; if (total & 0x1) return findKth(A, m, B, n, total / 2 + 1); else return (findKth(A, m, B, n, total / 2) + findKth(A, m, B, n, total / 2 + 1)) / 2; } };这样的代码我是想不出来,写不出来,看了半天才看懂。若是能记住我也就算是没白看。我以为得用两个索引呢,一个起始索引,一个结束索引;我也没想到考虑保证m一定小于n,没考虑k/2和m的关系。为什么用第k小的数就可以更简单些,就是因为第k小k是整数,不是median,不用取整并且作为索引。参数传递的一个是首地址,一个是长度,后面子递归程序改变的依然是当前的首地址和长度。当A数组长度小于k/2时,B数组长度一定大于k/2(否则的话第k小不存在),此时pb为什么为k-pa?其实此时pb完全可以是k/2的,之所以是k-pa是为了当B[pb-1]<A[pa-1]时,能多排除一些值,这样其实所有小于pb
都可以排除了(因为这些都是小于第k大的)。
相关文章推荐
- [LeetCode] 4.Median of Two Sorted Arrays
- leetcode第二题--Median of Two Sorted Arrays
- leetcode:Median of Two Sorted Arrays
- 【leetcode】Median of Two Sorted Arrays(hard)★!!
- [leetcode]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 "Median of Two Sorted Arrays"
- leetcode 150 Median of Two Sorted Arrays
- leetcode之Median of Two Sorted Arrays
- 【Leetcode】Median of Two Sorted Arrays
- LeetCode之Median of Two Sorted Arrays
- Leetcode Median of Two Sorted Arrays
- LeetCode, Median of Two Sorted Arrays, Java Solution, O(m+n), O(log(m+n))
- 25th Feb: LeetCode 4 Median of Two Sorted Arrays
- [LeetCode] Median of Two Sorted Arrays 两个有序数组的中位数
- leetcode-4-Median of Two Sorted Arrays