Мини-урок · перед практикой

Вставить элемент

Добавляем место в конце и освобождаем позицию k сдвигом.

Как к ней подойти

Потренируйтесь хранить последовательность значений и обращаться к нужным элементам списка.

Коротко о теме

Список хранит элементы в определённом порядке. Прежде чем менять его, решите, нужны ли исходные индексы и можно ли пройти по данным один раз. При удалении элементов будьте внимательны: индексы сдвигаются.

Ключевая идея · Сдвиг справа налево

Двигаясь справа налево, не затираем элементы, которые ещё предстоит перенести. Дополнительного списка не создаём.

Проверьте перед запуском

  • Обычный сдвиг слева направо без временной переменной уничтожит данные.
  • k может указывать на конец списка.

Сравните свой подход

Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.

Ваше принятое решение

Рекомендуемое решение: Сдвиг справа налево

Двигаясь справа налево, не затираем элементы, которые ещё предстоит перенести. Дополнительного списка не создаём.

a = list(map(int, input().split()))
k, value = map(int, input().split())
a.append(0)
for i in range(len(a) - 1, k, -1):
    a[i] = a[i - 1]
a[k] = value
print(*a)

Время: O(n - k) для вставки, O(n) с вводом и выводом. Память: O(n) входной список, O(1) дополнительная память.

Другой способ: Передача вытесненного элемента

Идём слева направо, сохраняя вытесненное значение в carry и помещая его в следующую клетку. Это другой способ сдвига на месте.

a = list(map(int, input().split()))
k, value = map(int, input().split())
a.append(0)
carry = value
for i in range(k, len(a)):
    a[i], carry = carry, a[i]
print(*a)

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