動態規劃專題之----198. House Robber
標籤(空格分隔): LeetCode
動態規劃的easy題,可是我還是做了很久,。然而,還是做出來了。
題目的大致意思是給定一個陣列,求出不相鄰的數之和的最大值。
2 1 1 2 —–》4
1.分解子問題
就拿這個2 1 1 2
來說,我們可以先求出2 1 1
的最值,然後加上2
後再來判斷是加2
好還是不加2
好。其中不加2
不是因為加了2
結果變小,而是因為我們選擇了2 1 1
的最後一個1
,此時加上2
後就不滿足不相鄰的條件了。於是遞推我們可以先計算2 1
後再來判斷加1
的情況。
2.確定狀態
dp[i]==j
表示前i+1
個數的最值為j
3.確定初始狀態
dp[0]=nums[0];
dp[1]=Math.max(nums[0],nums[1])
4.確定遞推公式
dp[i]=Math.max(dp[i-2]+nums[i],dp[i-1])
5.編碼
public class Solution {
public int rob(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int[] dp = new int[nums.length];
dp[0] = nums[0];
if (nums.length == 1) {
return dp[0];
}
dp[1] = Math.max(nums[0], nums[1]);
if (nums.length == 2) {
return dp[1];
}
for (int i = 2; i < nums.length; i++) {
dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
}
return dp[nums.length - 1];
}
public static void main(String[] args) {
Solution s = new Solution();
int[] nums = {2, 1, 1, 2};
System.out.println(s.rob(nums));
}
}
相關文章
- 動態規劃專題之----213. House Robber II動態規劃
- LeetCode 動態規劃 House Robber 習題LeetCode動態規劃
- 動態規劃專題動態規劃
- 動態規劃專題之---- Unique Binary Search Trees動態規劃
- Uber面試題 | 房屋竊賊 House Robber II面試題
- LeetCode-House RobberLeetCode
- Leetcode 198 House RobberLeetCode
- Leetcode 213 House Robber IILeetCode
- LeetCode-House Robber IILeetCode
- LeetCode-House Robber IIILeetCode
- 好題——動態規劃動態規劃
- 動態規劃題單動態規劃
- 動態規劃之股票問題123動態規劃
- 動態規劃之數的劃分動態規劃
- 動態規劃練習題動態規劃
- 動態規劃解題方法動態規劃
- 動態規劃做題思路動態規劃
- 【動態規劃(一)】動態規劃基礎動態規劃
- 動態規劃之0,1揹包問題動態規劃
- 動態規劃系列之六01揹包問題動態規劃
- 整數劃分問題(動態規劃)動態規劃
- 【LeetCode】House Robber III(337)LeetCode
- 動態規劃 擺花 題解動態規劃
- 動態規劃之子序列問題動態規劃
- 揹包問題----動態規劃動態規劃
- 【動態規劃】揹包問題動態規劃
- 做題記錄 --- 動態規劃動態規劃
- 我的動態規劃題單動態規劃
- 動態規劃動態規劃
- 動態規劃專項訓練 2動態規劃
- Leetcode 題解演算法之動態規劃LeetCode演算法動態規劃
- 博弈論專題——推理與動態規劃相關博弈之POJ2348動態規劃
- 動態規劃9:變態跳臺問題動態規劃
- 動態規劃 01揹包問題動態規劃
- 找零問題與動態規劃動態規劃
- 【動態規劃】01揹包問題動態規劃
- leetcode題解(動態規劃)LeetCode動態規劃
- 動態規劃-01揹包問題動態規劃