您的位置:首页 > 其它

213. House Robber II

2016-04-22 10:29 239 查看
//0ms
//比I中多了个条件,就是围成环了,这样,实际上就是两种情况,一种是从节点0处断开,为直线,求dp最大解,另一种就是从节点nums.size()-1处断开,成一条直线,求两者中的大的
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.size()==0) return 0;
if(nums.size()==1) return nums[0];
vector<int> v;
v.push_back(nums[0]);
for(int i=1;i<nums.size()-1;i++)
{
if(i==1) v.push_back(max(nums[0],nums[1]));
else v.push_back(max(v[i-1],nums[i]+v[i-2]));
}
int sum=v[v.size()-1];
v[0]=nums[1];
for(int i=2;i<nums.size();i++)
{
if(i==2) v[i-1]=max(nums[2],nums[1]);
else v[i-1]=max(v[i-2],nums[i]+v[i-3]);
}
return max(sum,v[v.size()-1]);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: