本题源自leetcode 198
---------------------------------------------------------
思路:1 根据下标的奇偶来,每次取,如果不强这个房子,和抢这个房子的最大值。
代码:
int rob(vector<int>& nums) {
int n = nums.size();
if(n == 0)
return 0;
int sum1 = 0, sum2 = 0;
for(int i = 0; i < n; i++){
if(i % 2){
sum1 = max(sum2,sum1 + nums[i]);
}else
sum2 = max(sum1,sum2 + nums[i]);
}
return max(sum1,sum2);
}
思路2 用一个临时变量来保存抢不抢这个房子
int rob(vector<int>& nums) {
int n = nums.size();
if(n == 0)
return 0;
/*
int sum1 = 0, sum2 = 0;
for(int i = 0; i < n; i++){
if(i % 2){
sum1 = max(sum2,sum1 + nums[i]);
}else
sum2 = max(sum1,sum2 + nums[i]);
}
return max(sum1,sum2);*/
int sum1 = 0, sum2 = 0;
for(int i = 0; i < n; i++){
int tmp = sum1;
sum1 = nums[i] + sum2; //抢这栋房子
sum2 = max(tmp, sum2); //不抢这栋房子
}
return max(sum1,sum2);
}