【发布时间】:2016-01-13 02:07:17
【问题描述】:
问题(来自Cracking the Coding Interview):编写一个方法,从大小为 n 的数组中随机生成一组 m 个整数。 每个元素被选中的概率必须相等。
我正在 JS 中实现我的答案。对于递归函数,代码有时会返回 undefined 作为数组中的元素之一。
我的 JS 代码
var pickMRecursively = function(A, m, i) {
if (i === undefined) return pickMRecursively(A, m, A.length);
if (i+1 === m) return A.slice(0, m);
if (i + m > m) {
var subset = pickMRecursively(A, m, i-1);
var k = rand(0, i);
if (k < m) subset[k] = A[i];
return subset;
}
return null;
};
给定的 Java 解决方案
int[] pickMRecursively(int[] original, int m,int i) {
if (i +1==m){// Basecase
/* return first m elements of original */
} elseif(i+m>m){
int[] subset = pickMRecursively(original, m, i - 1);
int k = random value between 0 and i, inclusive
if(k<m){
subset[k] = original[i]j
}
return subset;
}
return null;
}
【问题讨论】:
-
我无法理解您的代码,但您似乎不知道长度为
n的数组中的索引是0 to (n-1)
标签: javascript java random