Реверсивные элементы в массиве - PullRequest
0 голосов
/ 17 октября 2018

Я смотрел на цикл for, который переворачивает элементы в массиве, но я не совсем понимаю, что происходит внутри него.Это код:

 int middleIndex = (array.length) / 2;

    for (int i = 0; i < middleIndex; i++) {
        int temporaryVariable = array[i];
        array[i] = array[array.length - 1 - i];
        array[array.length - 1 - i] = temporaryVariable;
    }

Что именно делают две строки ниже int временная переменная = массив [i]?Как именно это обратить вспять элементы?

Ответы [ 5 ]

0 голосов
/ 17 октября 2018

другая часть должна была вернуть второе по величине число, но по какой-то причине она возвращает третье по величине число, что действительно странно.

Это код:

public static int returnSecondBiggest(int[] array) {
int largestElement = array[0];
for (int i = 1; i < array.length; i++) {
    if (array[i] > largestElement) {
        largestElement = array[i];
    }
}

int secondBiggest = Integer.MIN_VALUE;
for (int i = 0; i < array.length; i++) {
    if (array[i] > secondBiggest && array[i] != largestElement) {
        secondBiggest = array[i];
    }
}

return secondBiggest;

}

Как он возвращает третье, когда код должен возвращать второе?Я так потерян.

0 голосов
/ 17 октября 2018

Прежде всего помните, что индексы массива начинаются с 0. Таким образом, индекс последнего элемента - это array.length - 1.

Эти 3 строки меняют местами первый элемент с последним элементом, затем 2-й элементс элементом 2-ой из последней и т. д. temporaryVariable используется как временное место для хранения одного из значений во время замены, чтобы оно не потерялось при перезаписи другим значением.

  1. Возьмите копию значения в i:

    int temporaryVariable = array[i];

  2. Положите элемент i с концамассив (array.length - 1 - i) вместо него.

    array[i] = array[array.length - 1 - i];

  3. Поместите временно сохраненный элемент, который был элементом i в i с конца(array.length - 1 - i).

    array[array.length - 1 - i] = temporaryVariable;

Цикл останавливается, когда i достигает середины массива.(Если массив имеет нечетное количество элементов, средний остается там, где он есть.)

0 голосов
/ 17 октября 2018

2 строки после int temporaryVariable = array[i]; просто меняют i-й элемент на i-й от последнего элемента, и мы запускаем этот цикл вдвое меньше элементов в массиве.

0 голосов
/ 17 октября 2018

Этот алгоритм использует N / 2 итерации обмена значениями, хранящимися в массиве.Он начинается с начала массива (индекс 0) и продолжается до его половины (индекс N / 2).Он заменяет первый элемент (с индексом 0) на последний (индексированный N - 1 - 0), а затем заменяет второй элемент (с индексом 0 + 1) на предыдущий (индексированный N - 1 - (0 + 1).)) и т. д.

0 голосов
/ 17 октября 2018

Эффективно инвертирует элементы массива путем замены first на last, second на second_last и т. Д. Таким образом, число операций составляет ayrray_length / 2.

...