您的位置:首页 > 编程语言

【动态规划】Leetcode编程题解:198. House Robber Add to List

2017-05-07 23:41 337 查看
题目:
You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected andit will automatically
contact the police if two adjacent houses were broken into on the same night
.

Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonightwithout alerting the police.

这道题目是很符合动态规划的定义,主要是比较到到第n-2所房子所抢劫金额加上第n所房子的金额与到第n-1所房子所抢劫的金额之间的大小关系。
代码如下:
解法一:
class Solution {
public:
int rob(vector<int> nums) {
int len = nums.size();
if(len == 0) return 0;
if(len == 1) return nums[0];
else {
vector<int> maxv;
maxv.push_back(nums[0]);
maxv.push_back(max(nums[0], nums[1]));
for(int i = 2; i < len; i++) {
maxv.push_back(max(maxv[i - 2] + nums[i], maxv[i - 1]));
}
return maxv[len - 1];
}
}
};
解法二:
class Solution {
public:
int rob(vector<int> nums) {
int len = nums.size(), a = 0, b = 0;
for(int i = 0; i < len; i++) {
if(i % 2 == 1) {
a += nums[i];
a = max(a, b);
}
else {
b += nums[i];
b = max(a, b);
}
}
return max(a, b);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: