思路:
递推公式:
maxAmount[i] = max(maxAmount[i-2] + nums[i], maxAmount[i-1])
DP。
时间复杂度:O(N),空间复杂度O(N)。
DP
java code:
class Solution {
public:
int rob(vector<int>& nums) {
int n = nums.size();
if(n == 0) return 0;
else if(n == 1) return nums[0];
else {
vector<int> maxAmount(n, 0);
maxAmount[0] = nums[0];
maxAmount[1] = max(nums[0], nums[1]);
for(int i = 2; i < n; ++i) {
maxAmount[i] = max(maxAmount[i-2] + nums[i], maxAmount[i-1]);
}
return maxAmount[n - 1];
}
}
};
public class Solution {
public int rob(int[] nums) {
if(nums == null || nums.length == 0) return 0;
int[] dp = new int[nums.length + 1];
// init
for(int i = 1; i <= nums.length; ++i) {
dp[i] = nums[i - 1];
}
// dp
int max = dp[1];
for(int i = 2; i <= nums.length; ++i) {
dp[i] = Math.max(dp[i] + dp[i - 2], dp[i - 1]);
max = Math.max(dp[i], max);
}
return max;
}
}
打家劫舍问题DP解法
本文介绍了一种使用动态规划解决“打家劫舍”问题的方法,通过递推公式maxAmount[i]=max(maxAmount[i-2]+nums[i],maxAmount[i-1])实现了最优解的计算。该算法的时间复杂度为O(N),空间复杂度为O(N)。文中提供了详细的Java代码实现。
476

被折叠的 条评论
为什么被折叠?



