#198 Грабитель дома

Проблема



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

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

Пример 1:

Input: nums = [1,2,3,1]
Output: 4
Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).
Total amount you can rob = 1 + 3 = 4.

Пример 2:

Input: nums = [2,7,9,3,1]
Output: 12
Explanation: Rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1).
Total amount you can rob = 2 + 9 + 1 = 12.

Псевдокод

Глядя на диаграмму, мы можем сделать вывод, что:

maxLoot = []
maxLoot[0] = 2
maxLoot[1] = Math.max( houses[1], houses[0] )
----- patterns appears from now on -----
maxLoot[2] = Math.max( houses[1], houses[2] + houses[0] )
maxLoot[3] = Math.max( houses[2], houses[3] + houses[1] )
maxLoot[4] = Math.max( houses[3], houses[4] + houses[2] )
----- translate into logic -----
maxLoot[i] = Math.max( houses[i - 1], houses[i] + houses[i - 2] )

Код

Ссылка