#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, действительно хорошо объяснил.