一魚多吃 用DP解House Robbery 打家劫舍問題_Leetcode #198_Leetcode 精選75題解析

2024/01/22閱讀時間約 8 分鐘

這題也算是Leetcode 上經典的DP考題之一,也是很好的DP邏輯思考練習題。

題目敘述

題目會給我們一個nums陣列,分別代表每棟房屋的價值,也就是房屋內有的現金數量。

題目敘述給的情境是假想盜賊要偷東西,限制是相鄰的兩棟房屋不能一起偷,只能選擇其中一棟,否則就會觸發警報器。

請問怎麼選擇哪幾棟房屋下手,可以得到最大成果?


題目的原文敘述


測試範例

Example 1:

Input: nums = [1,2,3,1]
Output: 4
Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).
Total amount you can rob = 1 + 3 = 4.
挑第一棟和第三棟房屋,得到總價值為1+3=4

Example 2:

Input: nums = [2,7,9,3,1]
Output: 12
Explanation: Rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1).
Total amount you can rob = 2 + 9 + 1 = 12.
挑第一棟、第三棟和第五棟房屋,得到總價值為2+9+1=12

約束條件

Constraints:

  • 1 <= nums.length <= 100

輸入陣列長度介於1~100之間。

  • 0 <= nums[i] <= 400

陣列元素(每棟房屋的價值)介於0~400之間。


Dynamic programming的解題框架

再次複習Dynamic programming的解題框架,可分為三大步驟

1.定義狀態 [我在哪裡]

2. 定義狀態轉移關係式(通則) [我從哪裡來] => [答案從哪裡推導而來]

3. 釐清初始狀態(也可以說是遞迴的終止條件) [第一步怎麼走,怎麼出發的]


1. 定義狀態 [我在哪裡]

DP狀態的定義一開始其實題目沒給,但是沒關係,我們可以試著先定義、推導看看。

以行動支持創作者!付費即可解鎖
本篇內容共 3321 字、0 則留言,僅發佈於Leetcode 精選75題 上機考面試題 詳解你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
39會員
277內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
從 Google News 追蹤更多 vocus 的最新精選內容