LeetCode 打家劫舍(198)

2021-10-02 09:16:51 字數 1226 閱讀 4149

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。

給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

示例 1:

輸入: [1,2,3,1]

輸出: 4

解釋: 偷竊 1 號房屋 (金額 = 1) ,然後偷竊 3 號房屋 (金額 = 3)。

偷竊到的最高金額 = 1 + 3 = 4 。

示例 2:

輸入: [2,7,9,3,1]

輸出: 12

解釋: 偷竊 1 號房屋 (金額 = 2), 偷竊 3 號房屋 (金額 = 9),接著偷竊 5 號房屋 (金額 = 1)。

偷竊到的最高金額 = 2 + 9 + 1 = 12 。

1.當只有1個房屋時,那麼f(1) = ¥1

2.當有兩個房屋時,f(2) = max(f(1),¥2)

3.當有三個房屋時,有兩種情況:(a)打劫第乙個房屋和第三個房屋;(b)不打劫第三個房屋,仍取第乙個房屋和第二個房屋的最大值。f(3) = max(f(1) + ¥3,f(2))

4.當有n個房屋時,f(n) = max(f(n - 2) + ¥n,f(n - 1))

例如:[2,7,9,3,1]n

f(n)

1f(1) = 2

2f(2) = max(f(1), 7) = 7

3f(3) = max(f(3 - 2) + 9, f(2)) = max(2 + 9, 7) = 11

4f(4) = max(f(4 - 2) + 3, f(3)) = max(7 + 3, 11) = 11

5f(3) = max(f(5 - 2) + 1, f(4)) = max(11 + 1, 11) = 12

**

class

solution

return dp[nums.length -1]

;}}

打家劫舍 LeetCode 198

這是一道線性動態規劃,當前的狀態只與特定數量的前邊狀態相關。狀態的定義 dp i 小偷偷到第i間房時,偷到的最大金額為dp i 狀態轉移方程 dp i max dp i 1 dp i 2 nums i 初始狀態 dp 0 0 dp 1 nums 0 直接使用dp陣列的,沒有進行空間優化 class ...

leetcode第198題打家劫舍

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你 不觸動警報裝置的情況下 一夜之內能夠偷竊到的最高金額。示例 1 ...

打家劫舍(198)

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你不觸動警報裝置的情況下 一夜之內能夠偷竊到的最高金額。示例 1 輸...