Редакция для Замена значения
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. Идея
Нужно пройти по списку и для каждого элемента проверить: равен ли он числу x.
- если равен, заменяем его на
y; - если не равен, оставляем как есть.
После этого выводим весь список.
Это задача на простую обработку массива за один проход.
2. Наблюдения
- Замена выполняется независимо для каждого элемента.
- Порядок элементов менять не нужно.
- Если
xвообще не встречается, список останется прежним. - Если
x == y, то после замены список тоже не изменится, но алгоритм всё равно работает правильно. - Ограничение
n <= 2 * 10^5легко позволяет решить задачу простым линейным проходом по массиву.
3. Алгоритм
- Считать число
n. - Считать массив из
nцелых чисел. - Считать числа
xиy. - Пройти по массиву слева направо:
- если
a[i] == x, присвоитьa[i] = y.
- если
- Вывести получившийся массив.
4. Почему это работает
Рассмотрим любой элемент массива.
- Если он равен
x, по условию задачи его нужно заменить наy. Именно это делает алгоритм. - Если он не равен
x, менять его не нужно. Алгоритм оставляет его без изменений.
Так как алгоритм проверяет каждый элемент массива ровно один раз, то:
- все вхождения
xбудут заменены; - все остальные элементы сохранятся.
Значит, после завершения прохода получится ровно тот список, который требуется вывести.
5. Сложность
Пусть в массиве n элементов.
- Время работы:
O(n), потому что массив просматривается один раз. - Дополнительная память:
O(1), если не считать память самого массива.
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];
}
long long x, y;
cin >> x >> y;
for (int i = 0; i < n; i++) {
if (a[i] == x) {
a[i] = y;
}
}
for (int i = 0; i < n; i++) {
if (i > 0) {
cout << ' ';
}
cout << a[i];
}
cout << '\n';
return 0;
}
7. Код на Python 3
n = int(input())
a = list(map(int, input().split()))
x, y = map(int, input().split())
for i in range(n):
if a[i] == x:
a[i] = y
print(*a)
Комментарии