Форумчане, проблема с классом Random

Возникло вот такое недопонимание, логику выстроил верно и когда проверяю задачу через дебаггер все отрабатывается хорошо,но все равно не хочет проходить тесты.За не очень красивый код заранее извиняюсь(((.Задача взята с курсов https://hyperskill.org/learn/step/4940

Ваша задача состоит в том, чтобы найти семя между A и B (оба включительно), которое производит N псевдослучайных чисел от 0 (включительно) до K (исключительно). Он также должен иметь максимум этих N чисел, чтобы быть минимальным среди всех максимумов других семян в этом диапазоне.

Звучит сложно? Взгляните на этот пример.

Здесь мы имеем A = 7, B = 9, N = 4, K = 100. Давайте предположим:

Для семени 7 мы получаем последовательность 45, 99, 23, 67 – максимум 99. Для семени 8 мы получаем 64, 34, 23, 9 – максимум 64. Для семени 9 мы получаем 78, 34, 0, 11 – максимум 78.

Тогда минимум среди этих максимумов равен 64. Это означает, что в данном примере семя, которое мы ищем, равно 8.

Входные данные содержат числа A, B, N, K в одной строке в таком порядке.

Ваша задача-вывести 2 числа: семя и его максимум. Если есть несколько семян с равными минимальными максимумами, вы должны вывести семя, которое меньше, чем все остальные семена. Сообщить об опечатке

Пример Ввода 1:

0 100 5 1000

Пример Вывода 1:

18 270

Пример Ввода 2:

0 100 1000 1000

Пример Вывода 2:

5 993

Пример Ввода 3:

0 100 10000 1000

Пример Вывода 3:

0 999

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // write your code here
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        int[][] container = filler(a, b, n, k);
        checker(container, a);
    }

    public static void checker(int[][] arr, int a) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int[] row : arr) {
            int max = 0;
            for (int i : row) {
                max = Math.max(max, i);
            }
            list.add(max);
        }
        int num = list.get(0);
        for (int i : list) {
            num = Math.min(num, i);
        }
        int seed = a + list.indexOf(num);

        System.out.println(seed);
        System.out.println(num);
    }

    public static int[][] filler(int a, int b, int n, int k) {
        int[][] container = new int[b - a + 1][n];
        while (a <= b) {
            Random random = new Random(a);
            for (int i = 0; i < b - a + 1; i++) {
                for (int j = 0; j < n; j++) {
                    container[i][j] = random.nextInt(k);
                }
            }
            a++;
        }
        return container;
    }
}

Неудачный тест №1 из 5. неправильный ответ

Это пример теста из постановки задачи!

Тестовый вход: 0 100 5 1000 Правильный выход: 18 270

Вывод вашего кода: 49 463


Ответы (1 шт):

Автор решения: tym32167

Нет смысла хранить все, что сгенерировано, в памяти. Можно хранить только нужный ответ. Код не проверял, но должно быть что то типа такого

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    int a = scanner.nextInt();
    int b = scanner.nextInt();
    int n = scanner.nextInt();
    int k = scanner.nextInt();

    int minOfMaxes = k;
    int minOfMaxesSeed = a;

    for(int i=a; i<=b; i++)
    {
        int localMax = 0;
        Random rand = new Random(i);

        for(int j=0; j<n; j++)
            localMax = Math.max(localMax, rand.nextInt(k));

        if (localMax < minOfMaxes){
            minOfMaxes = localMax;
            minOfMaxesSeed = i;
        }
    }

    System.out.println(minOfMaxesSeed);
    System.out.println(minOfMaxes);
}
→ Ссылка