Повышение эффективности поиска наибольшего числа в списке

Для непустого списка функция корректна и уже имеет оптимальное O(n) время и O(1) память. Проблема контракта — null и пустой список маскируются значением int.MinValue.

Короткий ответ

Что ответить на собеседовании

Для непустого списка функция корректна и уже имеет оптимальное O(n) время и O(1) память. Проблема контракта — null и пустой список маскируются значением int.MinValue.

Подробный разбор

Ответ с пояснениями

Условие

Дана функция FindMax, реализующая поиск максимального значения в списке целых чисел. Является ли её реализация корректной? Как её можно улучшить с точки зрения производительности?

private int FindMax(List<int> numbers)
{
    int currentMax = int.MinValue;
    if (numbers != null)
    {
        foreach (int value in numbers)
        {
            if (currentMax < value)
            {
                currentMax = value;
            }
        }
    }
    return currentMax;
}

Ответ

Для непустого списка функция корректна и уже имеет оптимальное O(n) время и O(1) память. Проблема контракта — null и пустой список маскируются значением int.MinValue.

Для неупорядоченного списка в общем случае нужно просмотреть каждый элемент: максимум может оказаться последним. Сортировка даст лишнюю работу O(n log n), а замена foreach на for не улучшит асимптотику.

Лучше отклонять null и пустой список исключением либо возвращать nullable int/TryFindMax. При строгом контракте инициализируйте максимум первым элементом и сравнивайте остальные. Возвращать int.MinValue как признак отсутствия результата неоднозначно: это допустимое значение настоящего максимума.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее