由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问道小学题:两等长有序数组,求第k个数
相关主题
请教一题,求两个不等长的有序数组的median问一题:merge两个有序数组
那道经典的求和问题关于Inplace排序栈元素的解法?
一个查找算法题问一道题
把问题简化吧,找2个sorted array的median有好的merge有序数组算法么
简单的排列组合问题数独有啥好解法?
求两个等长有序数组的median的细节leetcode中那道Set Matrix Zeroes怎么做
讨论一题,去除有序数组的重复元素boggle game是不是只有backtracking的解法?
merge两个有序数组求教combination两种算法的complexity (leetcode)
相关话题的讨论汇总
话题: astart话题: bstart话题: int话题: return
进入JobHunting版参与讨论
1 (共1页)
n****r
发帖数: 120
1
我目前的做法是去A,B数组的中位数进行比较,然后根据最大的中位数左边的元素个数
和k进行比较来丢弃A或B的一端数据,递归的缩小范围。
还有其他更好的更简洁的解法没有?
n****r
发帖数: 120
2
是不是可以有logK的解法?
G******e
发帖数: 229
3
Yes. Use the method of binary search: compare the k/2-th smallest elements
in both list A[k/2] and B[k/2]. If A[k/2] <= B[k/2], throw away A[1] through
A[k/2] (and vice versa). Now recurse on the two new list with parameter k/2.

【在 n****r 的大作中提到】
: 是不是可以有logK的解法?
n****r
发帖数: 120
4
谢谢回复,贴个JAVA版
public static int kthSmallest(int[] a, int [] b, int k){
if (a == null || b == null || a.length != b.length || k < 1 || k > a.
length + b.length)
throw new IllegalArgumentException("Invalid input");
if (k == 1)
return Math.min(a[0], b[0]);
if (k == a.length + b.length)
return Math.max(a[a.length-1], b[b.length-1]);
return kthSmallest(a, 0, b, 0, k);
}
private static int kthSmallest(int[] a, int aStart, int[] b, int bStart, int
k){
if (aStart >= a.length)
return b[bStart + k - 1];
if (bStart >= b.length)
return a[aStart + k - 1];
if (k == 1)
return Math.min(a[aStart], b[bStart]);
int kk = k/2;

int ak = Math.min(a.length-1, aStart + kk - 1), bk = Math.min(b.length-1
, bStart+kk - 1);
if (a[ak] <= b[bk])
return kthSmallest(a, ak+1, b, bStart, k - (ak-aStart+1));
else
return kthSmallest(a, aStart, b, bk+1, k - (bk-bStart+1));
}
1 (共1页)
进入JobHunting版参与讨论
相关主题
求教combination两种算法的complexity (leetcode)简单的排列组合问题
Pow有没有比log(n)更好点的解法?求两个等长有序数组的median的细节
经典递归题需要搞懂非递归算法吗?讨论一题,去除有序数组的重复元素
求冥的问题merge两个有序数组
请教一题,求两个不等长的有序数组的median问一题:merge两个有序数组
那道经典的求和问题关于Inplace排序栈元素的解法?
一个查找算法题问一道题
把问题简化吧,找2个sorted array的median有好的merge有序数组算法么
相关话题的讨论汇总
话题: astart话题: bstart话题: int话题: return