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

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

示例 1:

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

示例 2:

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

示例 3:

输入:nums = [1,2,3]
输出:3

析:

1、环状排列意味着第一个房子和最后一个房子中只能选择一个偷窃,max(p1,p2):
在不偷窃第一个房子的情况下(即 nums[1:]),最大金额是p1;
在不偷窃最后一个房子的情况下(即nums[:n−1]),最大金额是p2;
2、子问题解法:使用动态规划求最大值,存储在dp[n];

解:

public class Test {public static void main(String[] args) {int[] nums = {2, 3, 2};Test test = new Test();int res = test.rob(nums);System.out.println(res);}public int rob(int[] nums) {int length = nums.length;if (length == 0)return 0;if (length == 1)return nums[0];return Math.max(myRob(Arrays.copyOfRange(nums, 0, length - 1)),myRob(Arrays.copyOfRange(nums, 1, length)));}public int myRob(int[] nums) {int length = nums.length;int[] dp = new int[length + 1];dp[0] = 0;dp[1] = nums[0];for (int i = 2; i <= length; i++) {dp[i] = Math.max(dp[i - 2] + nums[i - 1], dp[i - 1]);}return dp[length];}
}

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. srs 配置http flv集群
  2. jQuery ajax发送POST、JS url跳转、console用法
  3. python中os.system.获取输出信息_python中os.system()的返回值
  4. sscanf的常见用法
  5. Android WebKit
  6. Nginx之gzip压缩配置
  7. 激光slam_激光SLAM与视觉SLAM的特点
  8. linux 单用户模式 挂载u盘_(原创)Linux文件系统只读Read-only file system的快速解决方法...
  9. Adobe发布基于HTML5技术的网络开发工具以解决跨平台问题
  10. python opencv保存图片_OpenCV Python 保存图片
  11. 最让人心动的十大互联网界广告语+超笑评语
  12. 汇编语言 dos中masm的配置教程
  13. 最全英语日期相关表达
  14. python中spider的用法_Python爬虫从入门到放弃(十五)之 Scrapy框架中Spiders用法
  15. 如何快速入门RTOS
  16. Java Blend_Expression Blend的替代品[关闭]
  17. Win10“混合现实门户”图标更新:加入Fluent Design风格
  18. layui设置请求加载旋转等待
  19. 用计算机公式计算优良,『excel怎样合并单元格』如何在EXCEL中如何用公式计算全年级各班各科平均分、优秀率、合格率的方法...
  20. 彩色PCB 彩色丝印 2023年了PCB都是五彩斑斓了

热门文章

  1. (四)研发阶段(包括医疗领域等各种领域)涉及DHF、DMR、DHR 、LHR、FMEA、SFMEA等标准规范。
  2. PreSonus发布Studio One 6
  3. 万彩办公大师添加页码之后乱码
  4. Maple输入矩阵和向量
  5. 计算机的类型和应用领域
  6. The User Account Did Not work远程桌面连接错误的解决办法
  7. 深圳创服机构创成汇投融资对接指南
  8. 获取全国最新企业工商名录
  9. setOnTouchListener报警告
  10. 7月19黎明觉醒为什么服务器一直在维护,黎明觉醒游戏卡住了怎么办 游戏卡顿解决方法...