容量为k的袋子,一共有n个球,使得n>k时袋子里有k个球同时保证没吐出一个球所有球进袋子的概率就是k/i(i为当前一共吐出的数量i>k&&i<=n)
解法一:蓄水池算法
public int[] getKRands(int k,int max){
if(max<1||k<1) return null;
int[] res = new int[Math.min(k,max)];
for(int i=0;i<res.length;i++){
res[i] = i+1;
}
for(int i=k+1;i<max+1;i++){
// 已放入的某秋被淘汰的概率 (k/i)*(1/k)
if(rand(i)<=k{
res[rand(k)-1] = i;
}
}
public int rand(int max){
return (int)(Math.random()*max)+1;
}
}