作者ogamenewbie (._.)
看板java
标题Re: [问题] 1-42取出6+1个数字
时间Sat Jul 22 07:47:47 2006
(举手) 问几个问题...
这个看起来是从阵列最後方, 随机选一个之前的元素跟後面的置换.
然後把整个阵列 n 跑完之後, 取前面的 m 个...
那为什麽不直接後面作 m 次以後直接取後面的 m 个呢?
另外取前面 n 个, 第一个会永远不可能是自己吧?
最後感谢你提供 (对我来说) 如此易於了解的方法.
※ 引述《zanyking (遥远的旅人)》之铭言:
: 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)。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.25.148.49