動態規劃
dp[i]表示到第i個房屋的偷竊最高金額。
顯然,遞推公式為:dp[i]=max(dp[i−2]+nums[i−1],dp[i−1])
含義為,當前房屋的最高金額為前前個房屋的最高金額加上當前房屋的財富和上乙個房屋的最高偷竊金額中的最大值
1 特判,若陣列為空,返回0
2 初始化dp=[0,⋯ ,0]為n+1的全零陣列。
3 初始化第乙個房屋的最高偷竊金額:dp[1]=nums[0]
4 遍歷dp,遍歷區間[2,n+1):
dp[i]=max(dp[i−2]+nums[i−1],dp[i−1])
5 返回dp[n]
class solution:
def rob(self, nums: list[int]) -> int:
if(not nums):
return 0
n=len(nums)
dp=[0]*(n+1)
dp[1]=nums[0]
for i in range(2,n+1):
dp[i]=max(dp[i-2]+nums[i-1],dp[i-1])
return dp[-1]
LeetCode 打家劫舍
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...
leetcode 打家劫舍
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...
leetcode 打家劫舍
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...