给定一个正整数数组,随机取出一个数,要求数值越大的数被被取出的概率越大。- JAVA

来源:互联网 发布:网络分线盒 编辑:程序博客网 时间:2024/06/05 02:07

问题

给定一个正整数数组,随机取出一个数,要求数值越大的数被被取出的概率越大

思路

先将数组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)];    }}
阅读全文
0 0
原创粉丝点击