您的位置:首页 > 其它

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] 会被踢出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: