遙遠的旅人
2006-07-21 09:50:15 UTC
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
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