Получить недостающее число из массива int с потоками Java - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть следующий массив,

int [] a = {5,3,10,8,4,2,9,6};

Я пытаюсь получить пропущенный номер из массива,

private static int getMissingNumber(int[] a) {
    int expectedSum = IntStream.rangeClosed(1, 10)
            .reduce(0, Integer::sum);
    int actualSum = Arrays.stream(a).reduce(0, Integer::sum);

    return expectedSum-actualSum;
}

Но получаю 8 вместо 7. Чего мне здесь не хватает

Ответы [ 3 ]

3 голосов
/ 23 апреля 2020

Ваше минимальное значение 2, поэтому должно быть начало диапазона IntStream.rangeClosed(2, 10)

Также вы можете напрямую позвонить .sum() на IntStream

private static int getMissingNumber(int[] a) {
    return IntStream.rangeClosed(2, 10).sum() - Arrays.stream(a).sum();
}
3 голосов
/ 23 апреля 2020

Вам нужно использовать 2 вместо 1,

IntStream.rangeClosed(2, 10)

Вы также можете найти минимальный и максимальный элементы в массиве, используя summaryStatistics(),

private static int getMissingNumber(int[] a) {
    IntSummaryStatistics summaryStatistics = Arrays.stream(a).summaryStatistics();
    int expectedSum = IntStream.rangeClosed(summaryStatistics.getMin(), summaryStatistics.getMax())
            .sum();
    int actualSum = (int) summaryStatistics.getSum();

    return expectedSum-actualSum;
}
1 голос
/ 23 апреля 2020

Сумма чисел от 1 до 10 равна 10 * (10 + 1) / 2 = 55. Вам не хватает 1 и 7, поэтому сумма пропущенных чисел равна 8. Выглядит прямо мне.

...