您的位置:首页 > 其它

LeetCode 198. House Robber

2016-11-11 09:48 369 查看

描述

给出一个数组,求出一组子集,该子集中各个元素不相邻,求和最大的子集

解决

动态规划,定义res[i]: 表示前i个数构成的最大子集和,状态转移方程:
res[i] = max(res[i - 2] + nums[i], res[i - 1]);


class Solution {
public:
int rob(vector<int>& nums) {
int length = nums.size();
if (length == 0)
return 0;
else if (length == 1)
return nums[0];
else if (length == 2)
return max(nums[0], nums[1]);
vector<int> res(length);
res[0] = nums[0], res[1] = max(nums[1], nums[0]);
for (int i = 2; i < length; ++i)
{
res[i] = max(res[i - 2] + nums[i], res[i - 1]);
}
return res[length - 1];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode