Leetcode: Median of two sorted Array
2014-04-18 21:28
363 查看
将题目转化为 "Kth element in 2 sorted array" 的问题
if(m/2 + n/2) > k && a[m/2] > b[n/2] drop section 2
if(m/2 + n/2) > k && a[m/2] < b[n/2] drop section 4
if(m/2 + n/2) < k && a[m/2] > b[n/2] drop section 3
if(m/2 + n/2) < k && a[m/2] < b[n/2] drop section 1
代码:
class Solution {
public:
double findMedianSortedArrays(int A[], int m, int B[], int n) {
if((m+n) & 1) { // m+n is odd
return getKth(A, m, B, n, (m+n)/2+1);
} else {
return 1.0/2*(getKth(A, m, B, n, (m+n)/2)+ getKth(A, m, B, n, (m+n)/2 + 1) );
}
}
int getKth(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 <= 1) return min(A[0], B[0]);
if(A[m/2] > B[n/2]) {
if(m/2 + n/2 + 1 >= k) {
getKth(A, m/2, B, n, k);
} else {
getKth(A, m, B+n/2+1, n-(n/2+1), k-(n/2+1));
}
} else {
if(m/2 + n/2 + 1 >= k) {
getKth(A, m, B, n/2, k);
} else {
getKth(A+m/2+1, m-(m/2+1), B, n, k-(m/2+1));
}
}
}
};
总结
1. 第一次真正使用 A[], m 这种描述数组的方法. 的确, 这种方法比 int st, ed 要好, 毕竟少了个参数
2. 第一个判断条件是 a[m/2] > b[n/2]), 第二个判断条件是 (m/2 + n/2 +1). 第二个判断条件比较直观的是 m/2+n/2+2, 但 +1 的话能够更快的收敛, 因为这保证每次至少有 a[m/2] or b[n/2] 会被踢出
if(m/2 + n/2) > k && a[m/2] > b[n/2] drop section 2
if(m/2 + n/2) > k && a[m/2] < b[n/2] drop section 4
if(m/2 + n/2) < k && a[m/2] > b[n/2] drop section 3
if(m/2 + n/2) < k && a[m/2] < b[n/2] drop section 1
代码:
class Solution {
public:
double findMedianSortedArrays(int A[], int m, int B[], int n) {
if((m+n) & 1) { // m+n is odd
return getKth(A, m, B, n, (m+n)/2+1);
} else {
return 1.0/2*(getKth(A, m, B, n, (m+n)/2)+ getKth(A, m, B, n, (m+n)/2 + 1) );
}
}
int getKth(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 <= 1) return min(A[0], B[0]);
if(A[m/2] > B[n/2]) {
if(m/2 + n/2 + 1 >= k) {
getKth(A, m/2, B, n, k);
} else {
getKth(A, m, B+n/2+1, n-(n/2+1), k-(n/2+1));
}
} else {
if(m/2 + n/2 + 1 >= k) {
getKth(A, m, B, n/2, k);
} else {
getKth(A+m/2+1, m-(m/2+1), B, n, k-(m/2+1));
}
}
}
};
总结
1. 第一次真正使用 A[], m 这种描述数组的方法. 的确, 这种方法比 int st, ed 要好, 毕竟少了个参数
2. 第一个判断条件是 a[m/2] > b[n/2]), 第二个判断条件是 (m/2 + n/2 +1). 第二个判断条件比较直观的是 m/2+n/2+2, 但 +1 的话能够更快的收敛, 因为这保证每次至少有 a[m/2] or b[n/2] 会被踢出
相关文章推荐
- 133_leetcode_Median of Two Sorted Array
- leetcode.array--4. Median of Two Sorted Arrays
- [Leetcode]Median of two sorted array
- LeetCode 4 Median of Two Sorted Array
- Leetcode - Median of Two Sorted Array
- 【leetcode】Array—— Median of Two Sorted Arrays(4)
- [array] leetCode-4-Median of Two Sorted Arrays-Hard
- LeetCode – Refresh – Median of Two Sorted Array
- LeetCode2: Median of Two sorted array.
- Median of Two Sorted Array---LeetCode
- Leetcode--Median of Two Sorted Array
- [leetcode] #4 Median of Two Sorted Array
- LeetCode(4) MedianOfTwoSortedArray
- Median of Two Sorted Array leetcode java
- LeetCode4/88 Median of Two Sorted Arrays/Merge Sorted Array
- [LeetCode]Median of Two Sorted Array
- Median of Two Sorted Array leetcode java
- 4-leetcode-Median of Two Sorted Arrays
- [LeetCode] Median of Two Sorted Arrays 解题报告
- LeetCode 4 Median of Two Sorted Arrays