【问题标题】:Generate Random Number Array from a bigger array?从更大的数组生成随机数数组?
【发布时间】:2012-03-21 08:27:34
【问题描述】:

我需要从一个更大的 int 数组生成一个随机数组,不重复且在一个数字范围内。

例如 我有一个 1-200 int 的数组 a[] ,我需要的是来自所有 200 个 int 但大小为 15 的随机数数组。我该如何实现呢?

【问题讨论】:

    标签: java random


    【解决方案1】:

    Fisher-Yates shuffle。特别是,只打乱前 15 个元素并选择它们。

    【讨论】:

    • In particular, shuffle just the first 15 elements and select them. - 抱歉,我并没有真正理解这部分内容。能详细点吗?
    • +1 shuffle 依次为每个单元格选择一个随机元素。由于您只需要 15 个单元格,因此您可以在完成第 15 个单元格后停止。
    • 不过应该​​没有骗子。
    • aioobe,据我所知,他们的初始数组不包含重复项。
    • 注意:除非修改算法以处理新数组(通常是原位),否则这将修改初始数字数组,这可能有问题也可能没有问题。
    【解决方案2】:
    Random rnd = new Random();
    
    int[] a = new int[200];
    for (int i = 0; i < a.length; i++)
        a[i] = i;
    
    int[] r = new int[15];
    for (int i = 0; i < r.length; i++) {
        int j = rnd.nextInt(a.length - i);
        r[i] = a[j];
        a[j] = a[a.length - i - 1];
    }
    

    应该这样做。从a中随机抓取一些东西。抓住它后,将其替换为 a 的“最后一个”值。 “last”值很容易从 a.length 和 i 导出。

    【讨论】:

    • 没有问题。请记住,这会修改 a。
    猜你喜欢
    • 2013-05-31
    • 2021-05-15
    • 1970-01-01
    • 2016-04-27
    • 2011-02-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多