【Leetcode】198. House Robber

题目地址:

https://leetcode.com/problems/house-robber/description/

题目描述:

实际为从一组数中取出不相邻的数,使得他们的和最大。

解题思路:

动态规划,其实就是判断当前的数是否取舍,定一个数组dp,dp[i]表示第i个时能取得的

最大值,比较dp[i-1](不取当前数)和dp[i-2]+nums[i](取当前数)哪个大,即转移方程:

dp[i] = max(dp[i-1],dp[i-2] + nums[i])。注意需要初始化dp[0] = nums[0],dp[1] = max(nums[0],nums[1])

代码:

class Solution {
public:
    int rob(vector<int>& nums) {
        size_t size = nums.size();
        if (size == 0) {
            return 0;
        }
        if (size == 1) {
            return nums.at(0);
        }
        vector<int> dp(size);
        dp[0] = nums.at(0);
        dp[1] = max(nums.at(0), nums.at(1));
        
        for (size_t i = 2; i < size; i++)
        {
            dp[i] = max(dp[i - 2] + nums.at(i), dp[i - 1]);
        }

        return dp[size - 1];
    }
};

猜你喜欢

转载自www.cnblogs.com/AndrewGhost/p/8926701.html
今日推荐