Редакция для Разворот массива


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Автор: montes332

Разбор задачи «Разворот массива»

1. Идея

Нужно вывести элементы массива в обратном порядке.

Если исходная последовательность была такой:

a[0], a[1], a[2], ..., a[n-1]

то после разворота она должна стать такой:

a[n-1], a[n-2], ..., a[1], a[0]

Значит, достаточно просто пройти по массиву с конца к началу и вывести элементы.


2. Наблюдения

  1. Ничего сложного с самими значениями делать не нужно: ни сортировки, ни изменений чисел нет.
  2. Требуется только поменять порядок вывода.
  3. Удобно сначала считать весь массив, а потом пройти по нему в обратную сторону.
  4. Ограничение n <= 2 * 10^5 легко позволяет хранить массив в памяти.

3. Алгоритм

  1. Считать число n.
  2. Считать массив из n целых чисел.
  3. Для индекса i от n - 1 до 0:
    • вывести a[i].
  4. Между числами ставить пробел.

4. Почему это работает

По условию нужно получить последовательность, в которой:

  • последний элемент становится первым,
  • предпоследний — вторым,
  • и так далее.

Если идти по массиву с индекса n - 1 до 0, то мы как раз выводим элементы в нужном порядке:

  • сначала a[n-1],
  • потом a[n-2],
  • ...
  • в конце a[0].

Это точно совпадает с определением полного разворота массива, значит алгоритм верен.


5. Сложность

  • Время: O(n), потому что мы один раз считываем массив и один раз проходим по нему.
  • Память: O(n), потому что храним n чисел в массиве.

6. Код на C++17

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;

    vector<long long> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    for (int i = n - 1; i >= 0; i--) {
        cout << a[i];
        if (i > 0) {
            cout << ' ';
        }
    }
    cout << '\n';

    return 0;
}

7. Код на Python 3

n = int(input())
a = list(map(int, input().split()))
print(*a[::-1])

Комментарии

Еще нет ни одного комментария.