Нахождение максимальной разницы пары элементов в массиве, используя ТОЛЬКО 1 поток - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь написать функцию, чтобы найти максимальную разницу между любыми двумя элементами в массиве (1D). Я уже решил это несколькими способами (я применяю в Java)

  1. С 2 вложенных цикла (работает, находит разницу и берет максимум)
  2. При 1 л oop итерации (работает, находит минимальное и максимальное значения после их разницы: (max - min))
  3. Использование потока дважды (работает , находит максимум и минимум с помощью функций потока min () и max () и возвращаемой разности).

Теперь вопрос: как написать функцию, которая вычисляет максимальную разницу между любыми двумя элементами в массиве используя ровно 1 поток ?

Вот последнее, что я написал:

public static int maxDifference(int[] arr) {
    return Arrays.stream(arr).min().orElseThrow(NoSuchElementException::new) -
           Arrays.stream(arr).max().orElseThrow(NoSuchElementException::new);
}

1 Ответ

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

Использовать Arrays.stream(arr).summaryStatistics() - он возвращает вам IntSummaryStatistics объект, который имеет методы доступа для min и max.

...