从N个元素的集合中随机取m个元素的算法实现
2016-10-19 09:32
281 查看
最近有一个需求,比较简单,就是如标题所说的,从N个元素中随机取m个元素,当然这m个元素是不能存在重复的。本以为这么简单的需求,应该有现成的工具类来实现,但是几次查找居然没找到(有知道的可以推荐下哈^_^)。只好自己实现了下。
自己的实现思路也不知道是不是有问题,或者还有没有更好的思路来实现,所以在这里贴出来,供有兴趣的猿友提提建议、找找问题,或者找到更好的实现思路。
废话不多说,直接上代码(java实现)
自己的实现思路也不知道是不是有问题,或者还有没有更好的思路来实现,所以在这里贴出来,供有兴趣的猿友提提建议、找找问题,或者找到更好的实现思路。
废话不多说,直接上代码(java实现)
/** * 随机取num个从0到maxVal的整数。包括零,不包括maxValue * @param num * @param maxValue * @return */ public static List<Integer> random(int num,int maxValue){ if(num>maxValue ){ num=maxValue; } if(num<0 || maxValue<0){ throw new RuntimeException("num or maxValue must be greater than zero"); } List<Integer> result = new ArrayList<Integer>(num); int[] tmpArray = new int[maxValue]; for(int i=0;i<maxValue;i++){ tmpArray[i]=i; } Random random = new Random(); for(int i=0;i<num;i++){ int index = random.nextInt(maxValue-i); int tmpValue = tmpArray[index]; result.add(tmpValue); int lastIndex = maxValue-i-1; if(index==lastIndex){ continue; }else{ tmpArray[index]=tmpArray[lastIndex]; } } return result; }
相关文章推荐
- 算法导论-第12章-二叉搜索树:随机二叉搜索树数据结构C++实现(前中后序遍历,插入,搜索,前后毗邻元素,最大最小值)
- 将一组数据中的元素打乱,可以当成洗牌的算法,也可以用去实现拼图游戏当中随机位置的产生
- 多级树集合分裂(SPIHT)算法的过程详解与Matlab实现(7)解码过程——扫描解码
- 数据结构学习笔记<二> 算法2.1的具体实现,合并集合A,B
- 有序集合元素的字符串自然顺序实现
- 集合框架_TreeSet保证元素唯一性和比较器排序的原理及代码实现
- 4-4 求自定类型元素的平均 (10分) 本题要求实现一个函数,求N个集合元素S[]的平均值,其中集合元素的类型为自定义的ElementType。 函数接口定义: ElementType Aver
- 动态规划(1) 编程题#1:集合加法(Coursera 程序设计与算法 专项课程4 算法基础 郭炜、刘家瑛;map容器插入元素)
- 内部元素一一相应的集合的算法优化,从list到hashmap
- 基于随机游走的社团划分算法label progation 的python实现
- 用Python实现随机森林算法,深度学习
- java-集合类(3)-实现比较器(Comparator)接口-LinkedList针对插入删除、开始处增加元素
- 用js实现随机返回数组的一个元素
- 【DAY.9】php随机打乱数组顺序(洗牌算法实现)
- 算法:集合的划分原理及代码实现
- 31.session随机抽取之按时间比例随机抽取算法实现
- 转载:三种实现集合求子集合算法
- 《算法导论》习题2.3-7 查找集合S中是否有两个元素和为X---Java实现
- 元素位置【算法】插入排序的递归实现
- 有关集合算法的实现一些学习笔记