题目:
You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
思路:因为两个相邻的房子不能同时被偷,所以当偷奇数的房子就不能偷偶数的房子,所以定义两个变量,用a表示偶数,b表示奇数。这样把数组中的数按照奇偶来区分,这样也可以防止两个相邻的房子都被偷。
代码:
class Solution {
public:
int rob(vector<int>& nums) {
int size = nums.size();
int a= 0;
int b = 0;
for(int i = 0;i<size;i++)
{
if(i%2 == 0)
{
a = max(a+nums[i], b); //来判断nums[i]是否偷. 若是b大,则a中不包含nums[i],;若是b较小,则把nums[i]加到a中
}
else
{
b = max(a, b+nums[i]); //来判断nums[i]是否偷.和上面类似。
}
}
return max(a,b);
}
int max(int m, int n) //判断n和m哪个较大。
{
int result = m;
if(n>m) result = n;
return result;
}
};