(M)Dynamic Programming:213. House Robber II

来源:互联网 发布:阿里云上海机房在哪里 编辑:程序博客网 时间:2024/05/31 00:39

这个题稍微变通一下就不会了,其实就是一个小技巧而已:如果我们把第一家和最后一家分别去掉,各算一遍能抢的最大值,然后比较两个值取其中较大的一个即为所求。那我们只需参考之前的House Robber 打家劫舍中的解题方法,然后调用两边取较大值

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


原创粉丝点击