Menu
CoddyTech

House Robber

Дома стоят в ряд вдоль улицы, а nums[i] — это сумма денег в доме i. Ты можешь забрать деньги из любых выбранных тобой домов, но никогда не бери деньги из двух соседних домов. Верни наибольшую сумму, которую можешь забрать.

Функция

rob(nums: integer-array) → integer
numsinteger-array
деньги в каждом доме, в порядке расположения домов на улице
Возвращаетinteger
наибольшая сумма, которую можно получить, не забирая деньги из двух соседних домов

Ограничения

  • 1 ≤ nums.length ≤ 104
  • 0 ≤ nums[i] ≤ 1000
  • Ответ не превышает 5 × 106, поэтому он помещается в 32-битное целое число со знаком.

Примеры

Ввод
nums = [5, 3, 4, 11, 2]
Вывод
16
Пояснение
Возьми 5 и 11 из домов 0 и 3, чтобы получить 16. Можно пропустить два дома подряд, и здесь этот вариант лучше всех остальных: 5 + 4 + 2 = 11 и 3 + 11 = 14.
challenge icon

Дополнительный вопрос

Верните дома, которые нужно взять, а также общее количество. Что нужно сохранить из таблицы, чтобы восстановить этот список, и смогут ли два текущих итога справиться с этой задачей?

Сбросить код
def rob(nums):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргумент

nums = [5, 3, 4, 11, 2]

Ожидаемый вывод

16