Создание массива, содержащего два последовательных копирования исходного списка

Верните arr + arr или arr * 2. Получится новый список длиной 2n с двумя последовательными копиями ссылок на элементы.

Короткий ответ

Что ответить на собеседовании

Верните arr + arr или arr * 2. Получится новый список длиной 2n с двумя последовательными копиями ссылок на элементы.

Подробный разбор

Ответ с пояснениями

Условие

Дан массив arr длиной n. Необходимо сформировать массив result длиной 2·n, в котором сначала идут все элементы arr, а затем их копия в том же порядке.

Пример 1: Input: arr = [1,2,1] Output: [1,2,1,1,2,1] Explanation: Массив result формируется так:

  • result = [arr[0],arr[1],arr[2],arr[0],arr[1],arr[2]]
  • result = [1,2,1,1,2,1]

Пример 2: Input: arr = [1,3,2,1] Output: [1,3,2,1,1,3,2,1] Explanation: result = [arr[0],arr[1],arr[2],arr[3],arr[0],arr[1],arr[2],arr[3]]

  • result = [1,3,2,1,1,3,2,1]

Ответ

Верните arr + arr или arr * 2. Получится новый список длиной 2n с двумя последовательными копиями ссылок на элементы.

def concatenate_twice(arr):
    return arr + arr

assert concatenate_twice([1, 2, 1]) == [1, 2, 1, 1, 2, 1]

Исходный список не изменяется. Для пустого входа результат также пустой. Время и дополнительная память — O(n), поскольку нужно сформировать 2n элементов результата.

Копирование поверхностное: если элемент является вложенным изменяемым объектом, обе позиции будут ссылаться на него. Например, изменение одного вложенного списка станет видно в обеих половинах. Для чисел из примеров это не создаёт проблемы, так как они неизменяемы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее