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

[leetcode] House Robber II

2015-05-23 18:40 351 查看
和I类似,II变成了环形,即首尾只能取一个。调用两次即可。代码如下:

int rob(vector<int>& nums) {
if(nums.empty())
return 0;
if(nums.size() == 1)
return nums[0];
int val = *prev(nums.end());
nums.pop_back();
int result = robLine(nums);
nums.erase(nums.begin());
nums.push_back(val);
return max(result, robLine(nums));
}
int robLine(vector<int> &num) {
if(num.empty())
return 0;
int pre = 0, cur = num[0];
int result = cur;
for(int i = 1; i < num.size(); ++i){
result = max(result, pre + num[i]);
pre = cur;
cur = result;
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 c++ leetcode