LeetCode 198. 打家劫舍(DP)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 198. 打家劫舍(DP)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 題目
你是一個專業(yè)的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現(xiàn)金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統(tǒng),如果兩間相鄰的房屋在同一晚上被小偷闖入,系統(tǒng)會自動報警。
給定一個代表每個房屋存放金額的非負整數(shù)數(shù)組,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。
示例 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 。來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/house-robber
著作權歸領扣網絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。
2. 動態(tài)規(guī)劃解題
相關題目:
LeetCode 213. 打家劫舍 II(DP)
LeetCode 337. 打家劫舍 III(記憶化+遞歸)
- dp[i]dp[i]dp[i]表示經過i房間時,可以獲得的最大金額
- 顯然有 dp[0]=nums[0];dp[1]=max(nums[0],nums[1])dp[0] = nums[0]; \quad dp[1] = max(nums[0],nums[1])dp[0]=nums[0];dp[1]=max(nums[0],nums[1])
- 對第 iii 個房間有兩種選擇:
取2種情況的大者作為:經過i房間獲得的最大金額
狀態(tài)轉移公式:dp[i]=max(dp[i?2]+nums[i],dp[i?1])dp[i] = max(dp[i-2]+nums[i], \quad dp[i-1])dp[i]=max(dp[i?2]+nums[i],dp[i?1])
- 觀察到上面轉態(tài)轉移公式只跟前兩個轉態(tài)有關,可以進行壓縮,節(jié)省空間
總結
以上是生活随笔為你收集整理的LeetCode 198. 打家劫舍(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 495. 提莫攻击
- 下一篇: LeetCode 870. 优势洗牌(贪