近期项目中须要生成N个不相等的随机数。实现的时候。赶工期,又有项目中N非常小(0-100)直接谢了一个最直观的方法:

 public static List<Integer> randomSet(int num,int threshold){Random random = new Random();if(num > threshold) return null;Set<Integer> randomset = new HashSet<Integer>();while(randomset.size() < num)randomset.add(random.nextInt(threshold));List<Integer> result = new ArrayList<Integer>();result.addAll(randomset);return result ;}

仅仅要是依据HashSet 的来去重,到达不相等的随机数,可是当num比較大。或者num 比較接近threshold 的时候。这个时候平均期望比較大num*threshold*lognum 的复杂度

其它类似的方法还有比方使用一个数组来标记某个数字是否已经标记到。复杂度同上

以下主要讲两个复杂度分别为num 和 threshold 的方法:

方法 1 : 置乱(shuffle)。代码例如以下:

      public static List<Integer> random_shuffle(int num,int thresold){Random rd = new Random();List<Integer> result = new ArrayList<Integer>(thresold);for(int i = 0 ;i < thresold ;i++)result.add(i+1);for(int i = thresold; i > 0;i--)swap(result,i-1,rd.nextInt(thresold));return result.subList(0, num);}

将一个存有thresold 的数组,随机打乱顺序,然后返回前面num 个就可以。也能够直接使用Collections.shuffle(list)方法。看源代码可知,shuffle的算法也是如此。时间复杂度为threshold

方法 2  使用两个数组一个数组result 用来存结果 。target用来存1到threshold 个数,每次从去一个小于threshold的随机数 r,然后从target 中取出放到result 中,同一时候,target 中交换r 和threshold-1的数。同一时候threshold--。这样保证这个数字以后再也不会取到。

代码例如以下:

 public static List<Integer> random_2(int num , int thresold){Random rd = new Random();List<Integer> target = new ArrayList<Integer>(thresold);for(int i = 0 ;i < thresold ;i++)target.add(i+1);List<Integer> result = new ArrayList<Integer>();for(int i = 0 ; i < num ;i++){int  r = rd.nextInt(thresold);result.add(target.get(r));swap(target, r, thresold-1);thresold--;}return result;}

转载于:https://www.cnblogs.com/mengfanrong/p/5314410.html

生成N个不相等的随机数相关推荐

  1. php随机数字不重复,php生成N个不重复的随机数

    php生成N个不重复的随机数 生成N个不重复的随机数,如何在php中实现呢?本文分享的这例php代码,可以实现随机数的'生成,生成多个不重复的随机数,有兴趣的朋友参考下. php生成N个不重复的随机数 ...

  2. 如何生成指定范围不重复的随机数数组

    如何生成指定范围不重复的随机数数组 例如:输入m=10,n=20 输出结果:[14, 11, 18, 12, 19, 20, 13, 15, 17, 16, 10](结果不唯一,满足条件即可) 程序源 ...

  3. java 生成不重复随机数_Java如何实现生成n个不重复的随机数 Java实现生成n个不重复的随机数代码...

    Java如何实现生成n个不重复的随机数?本篇文章小编给大家分享一下Java实现生成n个不重复的随机数代码,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 需 ...

  4. 生成一定数量的不重复随机数

    /** array unique_rand( int $min, int $max, int $num )* 生成一定数量的不重复随机数* $min 和 $max: 指定随机数的范围* $num: 指 ...

  5. java生成大小写字母加数字的随机数

    项目中用到一授权码,网上搜索资源整理后发表 public class Random {/*** 生成32位大小写加数字随机数* @param args*/public static void main ...

  6. java 生成随机数字_java如何产生随机数

    一.java如何产生随机数? 1.打开eclipse 2.新建java项目,例如取名为"suijishu"点击完成 3.新建一个类进行测试 4.首先要在头部插入一个包 输入impo ...

  7. php随机生成0.1到10的随机数

    <?php class functions {//随机生成0.1到10的随机数public static function getNumber(){$arr = ['0.1','0.2','0. ...

  8. matlab 画随机数图,怎么用matlab生成100个标准正态分布的随机数并画出直方图

    正态分布是normpdf(x,mu,sigma)mu sigma 默认是 0 1例子ez 由热心网友提供的答案1: %生成一组随机数(正态分布)data=normrnd(0,1,1,500);%绘制直 ...

  9. Java连载81-枚举类型,生成五个不重复的随机数,集合简介

    一.枚举类型 1.枚举类型的格式就是enum+枚举类型的名称,可见下面的例子. package com.bjpowernode.java_learning;public class D81_1_ { ...

最新文章

  1. Intel和IBM押重注的神经模态计算,会给行业带来什么样的变化
  2. Android Stdio换源以及配置项目
  3. C#之while与do……while语句
  4. Spring如何加载XSD文件
  5. 《EDIUS 6.5快刀手高效剪辑技法》 即将上市
  6. python 内存释放gc_如何释放内存的python删除对象?
  7. pycharm中不能安装bs4的解决方案
  8. MySQL数据库基础理论
  9. 计算机应用基础课程学什么,计算机专业本科课程 主要学什么
  10. 2023年深圳市绿色低碳产业扶持计划申报指南
  11. 中国大数据行业发展趋势
  12. 微信内置浏览器无法下载文件应用的解决方案
  13. 启发式算法(Heuristic Algorithm)
  14. oracle做分页式报表,报表性能优化方案之单数据集分页SQL实现层式报表
  15. 计算机应用基础操作题答案,电大本科计算机应用基础网考操作题及答案
  16. php.符号,特殊符号大全
  17. 【Codeforces Round #466】E. Cashback DP+ST表
  18. mac网页java无法加载,chrome浏览器mac版无法加载怎么办_chrome浏览器mac版打不开网页解决方法-win7之家...
  19. Java物联网新零售项目 立可得-day01
  20. Airtest新增iOS、Windows录屏功能,真香

热门文章

  1. PHP根据时间戳返回星期几
  2. FreeBSD Ports加速的方法
  3. 090613 今天做了一个软件没搞定的RAID5
  4. ISA2006标准版,本地主机不能上网问题的解决一例
  5. 【救援过程】升级openssl导致libcrypto.so.1.1动态库不可用
  6. react测试组件_测试驱动的开发,功能和React组件
  7. 2019 6月编程语言_今年六月您可以开始学习650项免费的在线编程和计算机科学课程...
  8. 自学成才翁_如何发挥自学成才的内在游戏
  9. 数据通信技术(一:IP划分)
  10. 利用Nginx实现简易负载均衡