java.lang.NoClassDefFoundError: org / bouncycastle / jce / provider / BouncyCastleProvider

Простой алгоритм, который дает вам случайные числа без дубликатов, можно найти в книге Programming Pearls p. 127.

Внимание: результирующий массив содержит числа в порядке! Если вы хотите их в произвольном порядке, вы должны перетасовать массив, либо с помощью Fisher-Yates shuffle , либо с помощью списка и вызова Collections.shuffle().

Преимущество этого алгоритм заключается в том, что вам не нужно создавать массив со всеми возможными числами, а сложность выполнения по-прежнему линейна O(n).

public static int[] sampleRandomNumbersWithoutRepetition(int start, int end, int count) {
    Random rng = new Random();

    int[] result = new int[count];
    int cur = 0;
    int remaining = end - start;
    for (int i = start; i < end && count > 0; i++) {
        double probability = rng.nextDouble();
        if (probability < ((double) count) / (double) remaining) {
            count--;
            result[cur++] = i;
        }
        remaining--;
    }
    return result;
}

0
задан Michał Turczyn 13 July 2018 в 05:40
поделиться