由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 跪了,Median of Two Sorted Arrays 问题求解
相关主题
Find Median Of Two Sorted Arrays问一道在sorted array里search的问题
median of two sorted arrays的时间复杂度(附上了过了oj的代码)请帖个Median of Two Sorted Arrays的好解法?
贡献一个Median of two sorted arrays的java code网上看到的一个题findKthLargest
Median of Two Sorted ArraysM大小的数组中选出前N个元素 (如果M和N都很大)
find median for k sorted arrays问个面试题
找第K个最小的元素把问题简化吧,找2个sorted array的median
百思不得其解的一道题目刷题刷到没自信了
找2个sorted array中的第K小的元素,有O(lgn)方法吗?a[i] + b[j] = c[k] 的题有靠谱的答案不?
相关话题的讨论汇总
话题: int话题: startb话题: starta话题: return话题: len
进入JobHunting版参与讨论
1 (共1页)
d********m
发帖数: 101
1
第一次做难度5,要跪了,耗费了一天时间还是晕。思路明白,但是看不懂代码
http://blog.csdn.net/yutianzuijin/article/details/11499917
网上找的代码
看不懂4跟11行,求助大神们!
C********e
发帖数: 492
2
public double findMedianSortedArrays(int A[], int B[]) {
int len = A.length + B.length;
if (len % 2 == 1) {
return findKthSortedArrays(A, B, len / 2 + 1, 0, 0);
} else {
int left = findKthSortedArrays(A, B, len / 2, 0, 0);
int right = findKthSortedArrays(A, B, len / 2 + 1, 0, 0);
return (left + right) * 1.0 / 2;
}
}

private int findKthSortedArrays(int A[], int B[], int k, int startA, int
startB) {
if (startA >= A.length) {
return B[startB + k - 1 + (startA - A.length)];
}
if (startB >= B.length) {
return A[startA + k - 1 + (startB - B.length)];
}
if (k == 1) {
return Math.min(A[startA], B[startB]);
}
int p1 = k / 2;
int p2 = k - p1;
if (startA + p1 - 1 >= A.length) {
//return B[startB + k - 1 - (A.length - startA)];
p1 = A.length - startA;
p2 = k - p1;
}
if (startB + p2 - 1 >= B.length) {
//return A[startA + k - 1 - (B.length - startB)];
p2 = B.length - startB;
p1 = k - p2;
}
if (A[startA + p1 - 1] < B[startB + p2 - 1]) {
return findKthSortedArrays(A, B, k - p1, startA + p1, startB);
} else {
return findKthSortedArrays(A, B, k - p2, startA, startB + p2);
}
}

【在 d********m 的大作中提到】
: 第一次做难度5,要跪了,耗费了一天时间还是晕。思路明白,但是看不懂代码
: http://blog.csdn.net/yutianzuijin/article/details/11499917
: 网上找的代码
: 看不懂4跟11行,求助大神们!

k*******a
发帖数: 433
3
你给的链接的时间复杂度是(m+n)log(m+n),不符合题目要求啊
r*******e
发帖数: 971
4
public class Solution {
public double findMedianSortedArrays(int A[], int B[]) {
if (A==null||B==null) return 0;
int len = A.length+B.length;
if ((len&1)>0)
return findKth(A,0,B,0,len/2+1);
else
return findKth(A,0,B,0,len/2)/2.0+findKth(A,0,B,0,len/2+1)/2.0;
}
private int findKth(int[] A,int a, int[] B,int b,int k){
if (a>=A.length) return B[b+k-1];
if (b>=B.length) return A[a+k-1];
if (k==1) return Math.min(A[a],B[b]);

int median_A = (a+k/2-1 int median_B = (b+k/2-1
if (median_A>median_B)
return findKth(A,a,B,b+k/2,k-k/2);
else
return findKth(A,a+k/2,B,b,k-k/2);

}
}
s**x
发帖数: 7506
5
这题最优解法应该是log(min(m,n,k)).
是少数难题之一。边界条件多,写对了真不容易。
t*****3
发帖数: 112
6
第4行是为第11行服务的,第11行的目的是取两个数组的第k/2个元素来比较,问题是两
个数组长度不同时,且有可能短的数组会比k/2还小,这时候就必须要在k/2和较短的数
组的最后一个元素中取索引比较小的那个。举个简单例子:a = {1,3}和b = {2,4,6,8,
9}找第6小的数,那么k = 6, k/2 = 3, pa = 2, pb = 4, a[2 - 1] < b[4 - 1] --> b
[3]

【在 d********m 的大作中提到】
: 第一次做难度5,要跪了,耗费了一天时间还是晕。思路明白,但是看不懂代码
: http://blog.csdn.net/yutianzuijin/article/details/11499917
: 网上找的代码
: 看不懂4跟11行,求助大神们!

d********m
发帖数: 101
7
明白了,多谢LS各位解释!

8,
b

【在 t*****3 的大作中提到】
: 第4行是为第11行服务的,第11行的目的是取两个数组的第k/2个元素来比较,问题是两
: 个数组长度不同时,且有可能短的数组会比k/2还小,这时候就必须要在k/2和较短的数
: 组的最后一个元素中取索引比较小的那个。举个简单例子:a = {1,3}和b = {2,4,6,8,
: 9}找第6小的数,那么k = 6, k/2 = 3, pa = 2, pb = 4, a[2 - 1] < b[4 - 1] --> b
: [3]

1 (共1页)
进入JobHunting版参与讨论
相关主题
a[i] + b[j] = c[k] 的题有靠谱的答案不?find median for k sorted arrays
优步面试,哎。。。找第K个最小的元素
求 1st quantile,已知一个可以返回median的方法百思不得其解的一道题目
求代码,median of K sorted list找2个sorted array中的第K小的元素,有O(lgn)方法吗?
Find Median Of Two Sorted Arrays问一道在sorted array里search的问题
median of two sorted arrays的时间复杂度(附上了过了oj的代码)请帖个Median of Two Sorted Arrays的好解法?
贡献一个Median of two sorted arrays的java code网上看到的一个题findKthLargest
Median of Two Sorted ArraysM大小的数组中选出前N个元素 (如果M和N都很大)
相关话题的讨论汇总
话题: int话题: startb话题: starta话题: return话题: len