当前位置: 首页 > 知识库问答 >
问题:

有效的方法随机数字没有重复[重复]

孙嘉悦
2023-03-14

我使用了这段代码来随机化1000000个数字而不重复。这是我目前所掌握的。

enter code here  protected void randomise() {
    int[] copy = new int[getArray().length];
    // used to indicate if elements have been used
    boolean[] used = new boolean[getArray().length];
    Arrays.fill(used,false);
    for (int index = 0; index < getArray().length; index++) {
        int randomIndex;
        do {
            randomIndex = getRandomIndex();
        } while (used[randomIndex]);
        copy[index] = getArray()[randomIndex];
        used[randomIndex] = true;
    }
    for (int index = 0; index < getArray().length; index++) {
        getArray()[index] = copy[index];
        //Checks if elements in array have already been used
    }
}

public static void main(String[] args) {
    RandomListing count = new SimpleRandomListing(1000000);
    //Will choose 1000000 random numbers
    System.out.println(Arrays.toString(count.getArray()));
}

这种方法太慢了,你能告诉我如何更有效地完成这项工作吗?我感谢所有答复。问候

共有2个答案

刘嘉木
2023-03-14

看起来您正在使用线性搜索来查找匹配项。尝试使用二进制搜索,它更有效。必须对要搜索的数组进行排序才能实现二叉搜索。

辛盛
2023-03-14

更有效的方法是从数字池开始(例如,0 到 1000000 之间的所有数字的列表),然后删除您已经使用过的数字。这样,每次您尝试获取新号码时,都可以保证该号码以前从未使用过,而不是花时间试图找到一个“好”的未使用号码。

 类似资料:
  • 问题内容: 谁能告诉我如何生成不重复的随机数 随机(10)应该(可能)返回3、4、2、1、7、6、5、8、9、10,而无需重复 谢谢 问题答案: 我建议将数字加到,然后使用来随机化其顺序。像这样:

  • 我想获取字节数组的流,但我知道没有获取字节数组流的方法。 我的问题, 为什么不支持此功能? 如何获取字节数组流? 注意:我知道我可以使用< code>Byte[]而不是< code>byte[],但是这并没有回答我的问题。

  • 我之前问过这个问题,但是没有得到我想要的答案。经检查,这是我的错,因为我没有明确我的目标是什么,我很抱歉。我正在为一个AP统计类编写代码,我在其中必须生成没有重复的随机数据。TI计算器使用Lua,所以我希望我能制作一个程序,不仅生成数字,还能回答我的问题,只是为了缩短所需的时间。作业的名称是“ESP”为了时间的缘故,我会缩短场景,有两个人,艾米和本,他们在两张索引卡上写上名字,然后把他们的卡片放在

  • 我目前正在创建一个应用程序,它将生成随机数。所以每次它都会生成三个数字num1、num2和num3。这些数字不应该重复。例如,如果num1=1,则num2和num3不能等于1。我尝试过此代码,它将显示0-2之间的三个不同数字。然而,我想生成1-3、2-4、3-5等范围内的随机数。因此,我如何通过使用下面的代码来实现这一点。请帮帮我,因为我是新手。非常感谢。

  • 问题内容: 作为我项目的一部分,我需要通过提供一组数字来创建不重复的2或3位数字随机数。我不想为此实现一个列表或数组,因为我应该为每个函数调用获取1个随机数。 我尝试使用Java的SecureRandom类来做到这一点。我也从某些站点获得了帮助,但是我陷入了困境,我们可以改组VALUES并完成它吗?但是我不知道该怎么办。谁能帮我? 问题答案: Fisher- yates随机播放算法 是必经之路。其

  • 问题内容: 我知道这个问题有很多种,但是我还没有找到与我的效率问题相关的答案。 我有下面的代码工作正常。 我有一个10个项目的数组,可以从中随机选择一个项目(按Enter键)。该代码保留了不能随机选择的5个最近选择的数组(以避免随着时间的推移而重复过多)。 如果chooseName()函数最初选择了最近5次使用的名称,它只会中断并再次调用自身,重复直到找到“唯一”名称。 我有两个问题: 说这是“递