给定一个正整数数组,随机取出一个数,要求数值越大的数被被取出的概率越大。- JAVA
2017-10-19 11:00
477 查看
问题
给定一个正整数数组,随机取出一个数,要求数值越大的数被被取出的概率越大思路
先将数组arr按从小到大排序,然后新建一个数组arrbarr中排在第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)]; } }
相关文章推荐
- [Java]给定一个递增有序数组,要求构建一棵具有最小高度的二叉查找树
- 阿里巴巴面试算法题:有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机取出一个数,而这个数必须是符合1/N
- 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数放入数组b中,如果
- 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数放入数组b中,如果
- 写一个函数,随机地从大小为n的数组中选取m个整数。要求每个元素被选中的概率相等。
- Java给定一个数组,数组元素是一些正整数,求这些正整数收尾详解得出的最大数或最小数
- 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数放入数组b中,如果
- 给定一个数组,要求把数组内元素的顺序随机打乱,然后输出,主要是要保证效率。
- 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大 java实现
- C语随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数放入数组b中,
- 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数放入数组b中,如果
- 编写程序实现以下功能: 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条
- 程序员面试金典——解题总结: 9.18高难度题 18.3编写一个方法,从大小为n的数组中随机选出m个整数。要求每个元素被选中的概率相同。
- 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数放入数组b中,如
- 有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机
- 从数组中找出一对元素,其和是一个给定的目标数字。假设数组中只存在一个符合要求的数值对,返回这些数值的下标
- 如果给定一个数组arr[0,...N-1],要求找出相邻两个数的最大差值
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”(性能优化)[2014百度笔试题]
- 未知元素个数遍历一遍随机等概率取出一个
- 编程:用java 语言实现,输入一个数,就相应地输出的几维数组!||用1、2、2、3、4、5这六个数字,用java写一个函数,打印出所有不同的排列,要求:"4"不能在第三位,"3"与"5"不能相连