Минимум преобразованного списка равен удвоенному исходному минимуму. Разделите min(nums) на два и вычтите полученное значение из каждого элемента.
Восстановление первоначальных значений массива
Минимум преобразованного списка равен удвоенному исходному минимуму. Разделите min(nums) на два и вычтите полученное значение из каждого элемента.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
К каждому элементу исходного списка целых чисел прибавили его наименьшее значение, полученный список назвали nums. Необходимо реализовать функцию restore_values(), принимающую единственный параметр: • nums — непустой массив целых чисел (длина не превышает 10³). Функция должна вернуть массив с теми числами, которые находились в списке до изменения.
Пример 1: Ввод: print(restore_values([5, 9, 4, 7, 8])) Вывод: [3, 7, 2, 5, 6]
Пример 2: Ввод: print(restore_values([2, 3, 4, 5, 6, 7, 8, 9, 10])) Вывод: [1, 2, 3, 4, 5, 6, 7, 8, 9]
Ответ
Минимум преобразованного списка равен удвоенному исходному минимуму. Разделите min(nums) на два и вычтите полученное значение из каждого элемента.
Пусть исходный минимум равен m. После прибавления m ко всем элементам новый минимум станет m + m = 2m, даже если m отрицателен.
def restore_values(nums):
if not nums:
raise ValueError('Нужен непустой список')
minimum = min(nums)
if minimum % 2:
raise ValueError('Такой список не мог получиться по условию')
original_minimum = minimum // 2
return [value - original_minimum for value in nums]
В первом примере минимум равен 4, поэтому вычитаем 2. Во втором минимум 2 — вычитаем 1. Решение занимает O(n) времени и O(n) памяти для возвращаемого списка.