美文网首页Leetcode
Leetcode.198.House Robber

Leetcode.198.House Robber

作者: Jimmy木 | 来源:发表于2019-11-19 10:29 被阅读0次

    题目

    给定一个数组, 不能取连续两个相邻的数字, 求最大可以取多少数字.

    Input: [1, 2, 3, 1]
    Output: 4
    Input: [2, 7, 9, 3, 1]
    Output: 12
    

    思路

    DP, 对于第一个数字, 如果取第i个元素, 就可以加上dp[i-2], 如果不取第i个元素, 就是dp[i-1].

    int rob(vector<int>& nums) {
        if (nums.empty())   return 0;
        int n = (int)nums.size();
        vector<int> dp(n+1, 0);
        dp[1] = nums[0];
    
        for (int i = 2; i <= nums.size(); i++) {
            dp[i] = max(dp[i-2] + nums[i-1], dp[i-1]);
        }
        return dp[n];
    }
    

    总结

    仔细分析问题, 找到突破口.

    相关文章

      网友评论

        本文标题:Leetcode.198.House Robber

        本文链接:https://www.haomeiwen.com/subject/yncwictx.html