Восстановление первоначальных значений массива

Минимум преобразованного списка равен удвоенному исходному минимуму. Разделите 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) памяти для возвращаемого списка.

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

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

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

Подробнее