leet198 打家劫舍

2021-10-10 04:25:02 字數 910 閱讀 8123

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

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

示例 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 。

0 <= nums.length <= 100

0 <= nums[i] <= 400

讀題知輸入乙個長度為 n 的陣列,表示 n 個房屋,讓我們求到第 n 個房屋的最大金額。

我們想一下到第n個房屋的最大金額 dp[n]: 1. 如果偷第 n 個房屋的話,由於相鄰的房屋不能偷,所以 dp[n] = dp[n - 2] + nums[n](即等於到第 n - 2 個房屋的最大金額 + 第 n 個房屋的金額) 2. 反之如果不偷第 n 個房屋的話,那麼 dp[n] = dp[n - 1](即等於到第 n - 1 個房屋的最大金額)

於是,我們得到了狀態轉移方程:dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])

//基礎版本的 dp, 時間 o(n), 空間 o(n)

class solution

return c;

}};

198 打家劫舍

很明顯是dp問題。用乙個一維陣列表示dp陣列,狀態轉移方程為 resmax index max nums index resmax index 2 resmax index 1 其中resmax儲存,遍歷到該節點時的,最大值。注意,遍歷到該節點,但該節點不一定選。另外該題的初始解要想清楚。即resm...

198 打家劫舍

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

198 打家劫舍

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