Минимум и максимум
Храним лучший результат на текущий момент
Чтобы найти минимум или максимум, не нужно сортировать все данные. Достаточно пройти по ним один раз и хранить лучшее значение из уже просмотренных. Для минимума новое значение заменяет текущий результат, если оно меньше; для максимума — если больше.
int min = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] < min) {
min = numbers[i];
}
}
После обработки первых i элементов переменная
min хранит наименьшее значение среди них.
Каждый следующий элемент либо оставляет результат прежним, либо становится новым минимумом.
Почему начинаем с первого элемента
Для непустого массива самый надёжный начальный минимум — его первый элемент. Тогда он точно принадлежит данным, которые мы сравниваем, и не нужно придумывать искусственное «очень большое» число.
Например, начальное значение 0 сломает поиск минимума
в массиве {5, 8, 12}: ноль меньше всех элементов,
хотя самого нуля в массиве нет.
numbers[0] массив должен быть непустым.
Если пустой вход допустим по условию задачи, его нужно обработать отдельно.
Когда нужен не только результат, но и его позиция
Иногда задача просит индекс минимального или максимального элемента. Тогда удобно хранить не само лучшее значение, а его индекс: по индексу всегда можно получить и значение.
int maxIndex = 0;
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > numbers[maxIndex]) {
maxIndex = i;
}
}
Если одинаковый максимум встречается несколько раз, такой код сохраняет индекс первого из них,
потому что обновление происходит только при строгом >.
Если условию нужен последний максимум, правило сравнения будет другим.