作者zanyking (遥远的旅人)
看板java
标题Re: [问题] 1-42取出6+1个数字
时间Sat Jul 22 01:50:13 2006
1-42 取 7用set 的 Contains判断不取重复可能还好。
1-20000 取 10000呢?你很快就会觉得是不是掉进无穷回圈当中了。
(如果你不幸用递回写,哪很快就会stack Over Flow了。)
之前Trace JDK程式码时有看到一个好方法给大家参考。
原理如下:
假设阵列长度n,随机取m个。
for(int i = arr.length-1;i>=0;i--)
{
int randPosition = Random.getInt(i);//取得0~i之间的随机整数。
Swap(arr[i], arr[randPosition]);//替换值。
}
return arr[0]~ arr[m-1];
不考虑Random的实作效能的话,程式效率为O(n)。
--
JAVA 是一个静态型别reference指定、强物件型别判定的语言。
属於类C/C++族。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.85.116.116