Верните 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 элементов результата.
Копирование поверхностное: если элемент является вложенным изменяемым объектом, обе позиции будут ссылаться на него. Например, изменение одного вложенного списка станет видно в обеих половинах. Для чисел из примеров это не создаёт проблемы, так как они неизменяемы.