1. 程式人生 > >給定一個正整數陣列,隨機取出一個數,要求數值越大的數被被取出的概率越大。- JAVA

給定一個正整數陣列,隨機取出一個數,要求數值越大的數被被取出的概率越大。- JAVA

問題

給定一個正整數陣列,隨機取出一個數,要求數值越大的數被被取出的概率越大

思路

先將陣列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)]; } }