30 Day Challenge Day 12 | Leetcode 198. House Robber
题解
动态规划
Easy
class Solution {
public:
    int rob(vector<int>& nums) {
        if(nums.empty()) return 0;
        if(nums.size() == 1) return nums[0];
        if(nums.size() == 2) return max(nums[0], nums[1]);
        int n = nums.size();
        
        // dp1[i]: maximum amount of money for i houses
        vector<int> dp(n);
        
        dp[0] = nums[0];
        dp[1] = max(nums[0], nums[1]);
        
        for(int i = 2; i < n; i++) {
            dp[i] = max(dp[i-2] + nums[i], dp[i-1]);
        }
        
        return dp[n-1];
    }
};
空间优化
class Solution {
public:
    int rob(vector<int>& nums) {
        if(nums.empty()) return 0;
        int n = nums.size();
        int prev = 0, curr = nums[0];
        
        for(int i = 1; i < n; i++) {
            int temp = curr;
            curr = max(prev + nums[i], curr);
            prev = temp;
        }
        
        return curr;
    }
};
 

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号