/**
* @param nums
* @return
*//**
* @param nums
* @return
*//*
*假設打劫前i家能偷到的最大錢數為f(i),第i家有的錢數為nums[i],則有以下公式:
當i為1時:f(i) = nums[i]
當i為2時:f(i) = max(nums[i],nums[i-1])
當i大於2時:f(i) = max(nums[i-1] , nums[i-2] + nums[i])
*/var
rob=
function
(nums)
for(
let i =
0;i)else
if(i===1)
else
}/* dp陣列裡面儲存的是打劫前i所能偷到的最大錢數
輸出打劫了那些房子,原理是:首先找到打劫的最大錢數,找到第乙個出現該錢數的位置
那麼就表明之後沒有再偷其他的,則該位置就是偷的最後一家;然後用打劫到的最大錢數減去
該家所擁有的錢數就表明在前i家應打劫的最大錢數maxmoney,也就表示第乙個出現maxmoney
的位置就是倒數第二個偷的位置,以此類推直到maxmoney和第i家所擁有的錢數相等就證明
只打劫了這一家,因此該家是最後一家.*/
let maxmoney = math.
max(
...dp)
for(
let i = dp.length -
1;i>=
0;i--)if
(maxmoney===nums[i])}
return math.
max(
...dp)
};
打家劫舍系列DP之打家劫舍II
你是乙個專業的小偷,計畫偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第乙個房屋和最後乙個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝...
樹形DP 打家劫舍3
每個節點有選和不選兩種狀態,若選,則其孩子節點不可選,若該節點不選,則孩子節點可選也可不選 設dp u 0 表示不選當前結點u的情況下以u為根的子樹所能得到得最大價值 dp u 1 表示選當前結點u的情況下以u為根的子樹所能得到得最大價值 設v為其孩子節點 使用pair儲存選或不選兩種情況的值,通過...
leetcode 打家劫舍問題
題目 你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。分析 dp ...