Редакция для Разворот массива
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.
Submitting an official solution before solving the problem yourself is a bannable offence.
Автор:
Разбор задачи «Разворот массива»
1. Идея
Нужно вывести элементы массива в обратном порядке.
Если исходная последовательность была такой:
a[0], a[1], a[2], ..., a[n-1]
то после разворота она должна стать такой:
a[n-1], a[n-2], ..., a[1], a[0]
Значит, достаточно просто пройти по массиву с конца к началу и вывести элементы.
2. Наблюдения
- Ничего сложного с самими значениями делать не нужно: ни сортировки, ни изменений чисел нет.
- Требуется только поменять порядок вывода.
- Удобно сначала считать весь массив, а потом пройти по нему в обратную сторону.
- Ограничение
n <= 2 * 10^5легко позволяет хранить массив в памяти.
3. Алгоритм
- Считать число
n. - Считать массив из
nцелых чисел. - Для индекса
iотn - 1до0:- вывести
a[i].
- вывести
- Между числами ставить пробел.
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])
Комментарии