日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Leedcode][JAVA][第198题][打家劫舍][动态规划]

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Leedcode][JAVA][第198题][打家劫舍][动态规划] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【問題描述】[簡單]

你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定一個代表每個房屋存放金額的非負整數數組,計算你 不觸動警報裝置的情況下 ,一夜之內能夠偷竊到的最高金額。示例 1:輸入: [1,2,3,1] 輸出: 4 解釋: 偷竊 1 號房屋 (金額 = 1) ,然后偷竊 3 號房屋 (金額 = 3)。偷竊到的最高金額 = 1 + 3 = 4 。

【解答思路】

1. 動態規劃

第 1 步:設計狀態
int[] dp = new int[len + 1];
第 2 步:狀態轉移方程
dp[n] = MAX( dp[n-1], dp[n-2] + num )
第 3 步:考慮初始化
dp[0] = 0;
dp[1] = nums[0];
第 4 步:考慮輸出
dp[len]
第 5 步:考慮是否可以狀態壓縮
方法2
時間復雜度:O(N) 空間復雜度:O(N)

class Solution {public int rob(int[] nums) {int len = nums.length;if(len == 0)return 0;int[] dp = new int[len + 1];dp[0] = 0;dp[1] = nums[0];for(int i = 2; i <= len; i++) {dp[i] = Math.max(dp[i-1], dp[i-2] + nums[i-1]);}return dp[len];} }

與上面方法略有不同

class Solution {public int rob(int[] nums) {int n = nums.length;// 處理邊界條件。if (n == 0) {return 0;}if (n == 1) {return nums[0];}// 定義dp數組,按照狀態轉移方程遞推。int[] dp = new int[n];dp[0] = nums[0];dp[1] = Math.max(nums[0], nums[1]);for (int i = 2; i < n; i++) {dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);}return dp[n - 1];} }
2. 動態規劃壓縮空間

參照著 dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]) 這個方程來寫,

用 a 表示 i - 2,b 表示 i - 1,

因此上面的方程變成了dp[i] = max(b, a + nums[i]),

然后下一輪循環的時候:
i - 1 就變成了i - 2,因此現在需要把 b 賦值給 a;
i 就變成了 i - 1,因此現在需要把 dp[i] 賦值給 b。

時間復雜度:O(N) 空間復雜度:O(1)

class Solution {public int rob(int[] nums) {int a = 0, b = 0;for (int i = 0; i < nums.length; i++) {int c = Math.max(b, a + nums[i]);a = b;b = c;}return b;} }

【總結】

1.dp數組設置多一個 在前面添加后者后面添加

int[] dp = new int[len + 1];

2.動態規劃流程

第 1 步:設計狀態
第 2 步:狀態轉移方程
第 3 步:考慮初始化
第 4 步:考慮輸出
第 5 步:考慮是否可以狀態壓縮

3.動態規劃做多了 第一次自己寫了出來,可惜初始化沒有想全面

轉載鏈接:https://leetcode-cn.com/problems/house-robber/solution/liang-ge-yue-0ji-chu-cong-an-mo-shi-zhuan-xing-zi-/

總結

以上是生活随笔為你收集整理的[Leedcode][JAVA][第198题][打家劫舍][动态规划]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。