題目:
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。
給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。
示例 :
輸入: [1,2,3,1]
輸出: 4
解釋: 偷竊 1 號房屋 (金額 = 1) ,然後偷竊 3 號房屋 (金額 = 3)。
偷竊到的最高金額 = 1 + 3 = 4 。
題解:動態規劃:
由於不可以在相鄰的房屋闖入,所以在當前位置 i
ii 房屋可盜竊的最大值,要麼就是i−1
i-1i−
1 房屋可盜竊的最大值,要麼就是i−2
i-2i−
2房屋可盜竊的最大值加上當前房屋的值,二者之間取最大值。
d p(
i)
=dp(i)=
dp(i)=
從前i
ii個房屋能夠搶到的最大金額
n um
(i)=
num(i)=
num(i)
=第ii
i個房屋的金額
最終 dp(
i)=m
ath.
max(
dp(i
−1),
dp(i
−2)+
nums
(i−1
))
dp(i) = math.max(dp(i - 1), dp(i - 2) + nums(i - 1))
dp(i)=
math
.max
(dp(
i−1)
,dp(
i−2)
+num
s(i−
1))
scala**如下:
def rob
(nums: array[int]
): int =
else
dp(nums.length)}}
)}
LeetCode 198 打家劫舍
題目 你是乙個專業的強盜,計畫搶劫沿街的房屋。每間房都藏有一定的現金,阻止你搶劫他們的唯一的制約因素就是相鄰的房屋有保安系統連線,如果兩間相鄰的房屋在同一晚上被闖入,它會自動聯絡 給定乙個代表每個房屋的金額的非負整數列表,確定你可以在沒有提醒 的情況下搶劫的最高金額。思路 本題的大致意思就是求取乙個...
LeetCode198 打家劫舍
你是乙個專業的強盜,計畫搶劫沿街的房屋。每間房都藏有一定的現金,阻止你搶劫他們的唯一的制約因素就是相鄰的房屋有保安系統連線,如果兩間相鄰的房屋在同一晚上被闖入,它會自動聯絡 給定乙個代表每個房屋的金額的非負整數列表,確定你可以在沒有提醒 的情況下搶劫的最高金額。簡單的動態規劃問題,題目意思是計算陣列...
LeetCode198 打家劫舍
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...