給定一個正整數陣列,隨機取出一個數,要求數值越大的數被被取出的概率越大。- JAVA
阿新 • • 發佈:2019-01-22
問題
給定一個正整數陣列,隨機取出一個數,要求數值越大的數被被取出的概率越大
思路
先將陣列arr按從小到大排序,然後新建一個數組arrb
- arr中排在第1位的數,在arrb中寫入1次
- arr中排在第2位的數,在arrb中寫入2次
- arr中排在第3位的數,在arrb中寫入3次
- 以此類推…
如下圖
arr | arrb |
---|---|
1,2,3,4 | 1,2,2,3,3,3,4,4,4,4 |
出現次數多的數,即數值大的數,生成該範圍內的隨機數的概率也越大
java程式碼如下
import java.util.Arrays;
import java.util.Random;
public class Test {
public static void main(String[] args) {
System.out.println(getItem(new int[]{4,2,3,1}));
}
public static int getItem(int arr[]) {
Arrays.sort(arr);
int sum = 0 ;
for(int i = 1 ; i <= arr.length ; i++) {
sum += i;
}
int b[] = new int[sum];
for(int i = 0,index = 0 ; i < b.length ; index++,i += index) {
for(int j = i ; j < i + index + 1 ; j ++) {
b[j] = arr[index];
}
}
Random random = new Random();
return b[random.nextInt(sum)];
}
}