你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

示例 1:

输入: [2,3,2]
输出: 3
解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。

示例 2:

输入: [1,2,3,1]
输出: 4
解释: 你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。

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()));
    }
    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();
    }
};

213.打家劫舍II相关推荐

  1. LeetCode-动态规划-213. 打家劫舍 II

    213. 打家劫舍 II 思路:考虑三种情况注释代码中 class Solution {public:int rob(vector<int>& nums) {if(nums.emp ...

  2. LeetCode—213. 打家劫舍 II

    213. 打家劫舍 II 题目描述:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相 ...

  3. 213. 打家劫舍 II golang 动态规划

    题目 213. 打家劫舍 II 198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相 ...

  4. 动态规划——斐波那契数列(70. 爬楼梯、198. 打家劫舍、213. 打家劫舍II、信件错排、母牛生产)

    递归和动态规划都是将原问题拆分成多个子问题然后求解,但是动态规划存储了子问题的解,不需要重复计算. 动态规划(Dynamic Programming,DP)需要转移方程和边界条件. 目录 一.70. ...

  5. 代码随想录Day48|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

    文章目录 198.打0家劫舍 213.打家劫舍II 337.打家劫舍III 198.打0家劫舍 文章讲解:代码随想录 (programmercarl.com) 题目链接:198. 打家劫舍 - 力扣( ...

  6. day40|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

    198.打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 ...

  7. leetcode - 213. 打家劫舍 II

    解题思路:这道题是"打家劫舍I"的升级版,和"打家劫舍I"的区别在于"打家劫舍II"的第一个房子和最后一个房子是相连的,这就导致不能用&qu ...

  8. 【Leetcode】213. 打家劫舍II(House Robber II)

    Leetcode - 213 House Robber II (Medium) 题目描述:一个小偷沿着一条环形的街偷窃,给定数组表示每家屋子的金额,如果偷窃连续的两间屋子就会触发警报,求在不触发警报的 ...

  9. leetcode 213. House Robber II | 213. 打家劫舍 II(Java)

    题目 https://leetcode.com/problems/house-robber-ii/ 题解 这道题是「198. 打家劫舍」的进阶,和第 198 题的不同之处是,这道题中的房屋是首尾相连的 ...

  10. 【LeetCode笔记】213. 打家劫舍II(Java、动态规划)

    文章目录 题目描述 思路 & 代码 更新版 题目描述 在 I 的基础上,分成两部分,再取 Max 就行 思路 & 代码 由题意可知:一种路线中,不能同时出现第一家和最后一家. 那么好办 ...

最新文章

  1. 【398天】每日项目总结系列135(2018.03.10)
  2. ubuntu8.10家庭使用(一)
  3. 【Prince2科普】Prince2的七大原则(5)
  4. 下载历史版本的 xCode
  5. mysql用户添加_MySQL用户添加
  6. 树--树的基本性质(JAVA)
  7. rtsp转rtmp服务linux,ubuntu安装流媒体服务器(nginx+rtmp,rtsp转rtmp,rtsp转m3u8)
  8. sql中数据类型的转换(自己写比较累哈,偷偷懒,转下别人的)
  9. 【LeetCode】剑指 Offer 65. 不用加减乘除做加法
  10. html5 超链接 图像映射,链接图像
  11. mysql双机热备 读写分离_轻松搭建MySQL主从复制、读写分离双机热备)
  12. 详细又简单的Unity的下载安装教程
  13. [iOS]Mac系统下安装windows共享打印机采坑记
  14. java lambda排序
  15. Java贪吃蛇(附完整代码下载链接)-跟随狂神一天完成
  16. 代码中的Status和State语义
  17. SylixOS的I/O系统结构类型(ORIG型和NEW_1型)
  18. Visual Studio Code下c语言环境的安装与运行
  19. 服装行业如何做软文营销推广产品?
  20. Python学习:代码过长的换行方式

热门文章

  1. oracle:sql介绍及SQL基本查询 lt;四gt;
  2. 学习笔记——字符串方法整理
  3. (转)Android开发书籍推荐:从入门到精通系列学习路线书籍介绍
  4. [ IOS ] iOS-控制器View的创建和生命周期
  5. LayoutInflater拦截View创建,自定义Resource对象
  6. jquery层级原则器(匹配前一个元素后的下一个元素,必须是挨着的)
  7. Servlet各种接口和类
  8. C#对IE使用Proxy(代理)
  9. string容器字符存取
  10. java实训---------双色球彩票管理系统(LotterySystem)