您的位置:首页 > 其它

LeetCode House Robber DP

2015-10-20 20:17 253 查看
思路:

递推公式:

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: