猿问

随机 4 个小于最大最大值(例如 100_000)的唯一整数的有效算法

这是我的尝试:


public static void main(String[] args) {

    // Max 100_000

    System.out.println(Arrays.toString(randomFour(100_000)));

}


public static int[] randomFour(int max) {

    Random r = new Random();

    int[] four = new int[4];


    for (int i = 0; i < 4; i++) {


        while (true) {

            // Random from 1 to max

            four[i] = 1 + (int) (r.nextFloat() * max);


            boolean dup = false; // check j: 0 -> i-1

            for (int j = 0; j < i; j++) {

                if (four[j] == four[i]) {

                    dup = true;

                    break;

                }

            }

            if (dup == false) {

                break;

            }

        }

    }

    return four;

}

这个实现工作正常。有没有更好的算法来解决这个问题(时间和内存消耗),尤其是对于一个非常大的最大值?谢谢!


德玛西亚99
浏览 80回答 1
1回答

明月笑刀无情

如果我理解正确的话,你想要一个包含 1 到 100_000(含)之间的 4 个不同随机整数的数组。这是一种简洁的表达方式int[]&nbsp;four&nbsp;=&nbsp;ThreadLocalRandom.current() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ints(1,&nbsp;100_001)&nbsp;//&nbsp;1&nbsp;is&nbsp;inclusive,&nbsp;100_001&nbsp;is&nbsp;exclusive &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.distinct() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.limit(4) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.toArray();
随时随地看视频慕课网APP

相关分类

Java
我要回答