Как этот метод выдает наибольшее значение из массива?

#arrays

#массивы

Вопрос:

Я не понимаю, как работает код в этом методе для нахождения значения самого высокого ключа из массива. Что делает значение -1, присвоенное переменной max?

     public long getMax() {
    int j;
    long max = -1;
    if (nElems == 0) return max;
    for (j = 0; j < nElems; j  )
        if (a[j] > max)
            max = a[j];
    return max;
}
  

Из этого массива возвращается значение 88 = [77 44 22 88 11 66 33

Комментарии:

1. Предполагая, что массив содержит только неотрицательные целые числа, присвоение -1 max гарантирует, что первое значение в массиве будет больше, чем оно, поэтому на первом проходе цикла max будет установлено значение a[0]

2. Спасибо, Ник! Теперь я это понимаю. Я просто впервые углубляюсь в книгу Роберта Лафора о структурах данных и алгоритмах на Java и пробираюсь через несколько программных проектов.

3. Это взлом, и его не следует использовать. Если максимальное значение массива на самом деле равно -1, это даст тот же результат, что и пустой массив.

Ответ №1:

Проследите код. Предполагается, что массив содержит положительные числа.

Идея состоит в том, чтобы выполнить итерацию по массиву слева направо, сохраняя при этом максимальное значение. Итак, перед итерацией мы присваиваем max значение -1, что означает, что сейчас это самое высокое значение (поскольку мы не просматривали элементы)

Затем, когда встречается первый элемент, который, очевидно, будет больше -1, мы присваиваем max первому элементу. Затем мы проходим через второй элемент (44), который ниже максимального значения (77), поэтому мы не меняем максимальное значение и так далее. Вот как это работает.

Мы могли бы назначить max первым элементом, а затем выполнить итерацию, но рекомендуется начинать с минимально возможного значения при попытке найти max и максимально возможного значения при попытке найти min.

Комментарии:

1. Спасибо srv236, действительно хорошо объяснил.