letecode [198] - House Robber

 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.

Example 1:

Input: [1,2,3,1]
Output: 4
Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).
             Total amount you can rob = 1 + 3 = 4.

Example 2:

Input: [2,7,9,3,1]
Output: 12
Explanation: Rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1).
             Total amount you can rob = 2 + 9 + 1 = 12.

Subject to the effect :

   Given a representative of a non-negative integer array to store the amount of each house, the thief needs to steal in the two non-adjacent room, find the thief steal the maximum amount.

Understanding:

  The first idea is: corresponding to odd values ​​and the array index takes values ​​corresponding subscripts and an even number, compare whichever is greater, but the solutions are not considered part may not be the optimal solution.

  Odd and sumOdd, every time a new value added compared sumEven, if less than sumEven, it indicates that the current optimal solution in front, sumOdd = sumEven.

  For the even empathy. And comparing the two, whichever is greater.

Code C ++:

class Solution {
public:
    int rob(vector<int>& nums) {
        int sumOdd=0,sumEven=0;
        for(int i=0;i<nums.size();++i){
            if(i&1==1){
                sumOdd += nums[i];
                if(sumOdd<sumEven)
                    sumOdd = sumEven;
            }else{
                sumEven += nums[i];
                if(sumEven<sumOdd)
                    sumEven = sumOdd;
            }
        }
        return sumOdd>sumEven?sumOdd:sumEven;
    }
};

operation result:

  When execution: 4 ms, beat the 93.13% of all users to submit in C ++

  Memory consumption: 8.6 MB, defeated 75.24% of all users to submit in C ++

Guess you like

Origin www.cnblogs.com/lpomeloz/p/11014185.html