Редакция для Замена значения


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.

1. Идея

Нужно пройти по списку и для каждого элемента проверить: равен ли он числу x.

  • если равен, заменяем его на y;
  • если не равен, оставляем как есть.

После этого выводим весь список.

Это задача на простую обработку массива за один проход.

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

  1. Замена выполняется независимо для каждого элемента.
  2. Порядок элементов менять не нужно.
  3. Если x вообще не встречается, список останется прежним.
  4. Если x == y, то после замены список тоже не изменится, но алгоритм всё равно работает правильно.
  5. Ограничение n <= 2 * 10^5 легко позволяет решить задачу простым линейным проходом по массиву.

3. Алгоритм

  1. Считать число n.
  2. Считать массив из n целых чисел.
  3. Считать числа x и y.
  4. Пройти по массиву слева направо:
    • если a[i] == x, присвоить a[i] = y.
  5. Вывести получившийся массив.

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)

Комментарии

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