加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 生成唯一的随机数

发布时间:2020-12-15 04:43:36 所属栏目:Java 来源:网络整理
导读:参见英文答案 Creating random numbers with no duplicates????????????????????????????????????15个 如何在1到9之间生成9个随机数,不重复,一个接一个.就像是: 假设生成的第一个随机数是4,那么下一个随机数必须在[1,9] – {4}中. 我的第一种方法是将每个随
参见英文答案 > Creating random numbers with no duplicates????????????????????????????????????15个
如何在1到9之间生成9个随机数,不重复,一个接一个.就像是:
假设生成的第一个随机数是4,那么下一个随机数必须在[1,9] – {4}中.
我的第一种方法是将每个随机生成的数字添加到一个集合中,从而避免重复.但是在更糟糕的情况下,就像我们已经生成6并且我们必须再生成3个数字一样,这个过程有点慢.当范围从[1,9]变为[1,1000]时,这种方法听起来不正确.
任何人都可以建议替代方法.

解决方法

以下是两种可能的方法: –

方法1: –

  1. Have all numbers in an array with size n.
  2. select a number an index at random i = rand(0,size)
  3. print arr[i]
  4. swap arr[i] and arr[size-1]
  5. size = size -1
  6. repeat 1 to 5 till list is exhausted.

时间复杂度:O(N)

空间复杂度:O(N)

方法2: –

  1. Select a pool size of K.
  2. generate K random integers.
  3. show them as first k results.
  4. Add them to a hashset.
  5. Add all ak+1 for all previous integers in a pool.
  6. Add 1 if it is not in hashset.
  7. pick a integer r at random from pool and show it .
  8. Add r+1 into pool if its not in hashset
  9. Do 7 to 8 till pool is exhausted.

时间复杂度:O(N)

空间复杂度:O(K)

专业版缺点: –

方法1:将此方法用于小整数范围,因为它需要更大的空间,但速度非常快且随机.

方法2:将此方法用于更大的范围,因为它需要您选择的内存O(K). k越高,生成的数字的随机性越高.因此,您可以在空间和随机性之间实现良好的折衷,同时保持良好的速度.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读