Вставить элемент
Вы решили задачу. Теперь можно сравнить подходы.
Добавляем место в конце и освобождаем позицию 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) дополнительно.
На что обратить внимание
- Обычный сдвиг слева направо без временной переменной уничтожит данные.
- k может указывать на конец списка.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.