阅读目录
- 1. 题目
- 2. 解题思路
- 3. 代码实现
1. 题目
2. 解题思路
此题是 LeetCode 198—— 打家劫舍 的升级版,多了一个首尾相连的设定。
因为首尾相连,所以第一个房屋和最后一个房屋只能偷窃其中一个。
所以,第一种方案就是不偷窃最后一个房屋,那么我们从第一个房屋偷到倒数第二个房屋,看看这样能偷窃到的最大值是什么。
第二种方案则是从最后一个房屋偷到第二个房屋,这样也有一个最大的偷窃金额。
而这两种方案的较大值也就是我们题目所求。
3. 代码实现
class Solution {
public:
int rob(vector<int>& nums) {
if (nums.size() == 1) {
return nums[0];
}
int stole_value = 0;
int not_stole_value = 0;
int max_value_1 = 0;
for (int i = 0; i < nums.size()-1; ++i) {
int temp = not_stole_value;
not_stole_value = max(stole_value, not_stole_value);
stole_value = temp + nums[i];
max_value_1 = max(max_value_1, stole_value);
}
stole_value = 0;
not_stole_value = 0;
int max_value_2 = 0;
for (int i = nums.size()-1; i > 0; --i) {
int temp = not_stole_value;
not_stole_value = max(stole_value, not_stole_value);
stole_value = temp + nums[i];
max_value_2 = max(max_value_2, stole_value);
}
return max(max_value_1, max_value_2);
}
};