zoukankan      html  css  js  c++  java
  • 如何获取不重复的随机数

    注意:如何取一组不重复的随机数,这种方法的前提是取数的这个数组没有重复的数方可。

    (1)换位排除法

     1 /**
     2      * @param arr 取数的数组
     3      * @param noRepeatNumbers  要获取不重复数的个数
     4      */
     5     public static int[] getNoRepeatNumByChanget(int[] arr, int noRepeatNumbers) {
     6 
     7         int[] newArr = new int[noRepeatNumbers];
     8         for (int i = 0; i < noRepeatNumbers; i++) {
     9             Random random = new Random();
    10             //角标是从i-arr.length-1的随机数
    11             //这里0%5=0 1%5=1 2%5=2 .....5%5=0;
    12             int s = random.nextInt(arr.length - 1) % (arr.length - 1 - i + 1)
    13                     + i;
    14             int temp = arr[i];
    15             //将随机取到的下标的值,与i交换,然后下一次取i++到length的一个随机数
    16             arr[i] = arr[s];
    17             arr[s] = temp;
    18             newArr[i] = arr[i];
    19         }
    20         return newArr;
    21     }

    (2)set排异法

      

     1 /**
     2      * 
     3      * @param arr 要遍历的数组
     4      * @param noRepeatNumbers  获取不重复数的个数
     5      * @return
     6      */
     7     public static Set<Integer> getNoRepeatNumBySet(int[] arr,
     8             int noRepeatNumbers) {
     9         Random random = new Random();
    10         Set<Integer> set = new HashSet<Integer>();
    11         while (true) {
    12             int s = random.nextInt(arr.length);
    13             //将随机的下标的数添加到set集合中
    14             set.add(Integer.valueOf(arr[s]));
    15             //如果set中的数长度等于要获取不重复数的个数时,跳出循环
    16             if (set.size() == noRepeatNumbers) {
    17                 break;
    18             }
    19         }
    20         return set;
    21 
    22     }
  • 相关阅读:
    程序员的成长
    存储系统的基本数据结构之一: 跳表 (SkipList)
    【机器学习-斯坦福】学习笔记3
    TCP/IP入门(3) --传输层
    2015华为暑期实习(北京)面试经验
    C++面试中关于sizeof问题总结
    KMP详解
    hihoCoder #1014 : Trie树
    Trie树的创建、插入、查询的实现
    Trie树(c++实现)
  • 原文地址:https://www.cnblogs.com/dukc/p/5491677.html
Copyright © 2011-2022 走看看