LeetCode 213.打家劫舍 II Java实现

LeetCode 213. 打家劫舍 II [java实现] 一、问题描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额。   二、测试数据 示例 1: 输入:nums = [2,3,2] 输出:3 解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 阅读详情

题目


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

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

示例 1:

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

示例 2:

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

思路


这里首先使用动态规划的思路,将前n个房屋可偷窃得到的最大金额写在当前位置,然后在后面的位置只能调用与自己相隔一位以上的位置的金额,因为相隔2n+1位可以在相隔2(n-1)+1的位置获得,所以取相隔一位和相隔二位的进行比较,取大的与自己相加即可,而由于第一位和最后一位看成相隔的,所以将数组分成两个部分,0到length-2和1到length-1,比较大小返回大的。

代码


class Solution {
    public int rob(int[] nums) {
        if(nums.length==0) // 处理特殊情况
            return 0;
        else if(nums.length==1)
            return nums[0];
        else{
            int[] n1=new int[nums.length-1];
            int[] n2=new int[nums.length-1];
            for(int i=0;i<nums.length-1;i++){
                n1[i]=nums[i];
                n2[i]=nums[i+1];
            }
            int r1=r(n1);
            int r2=r(n2);
            if(r1>r2)
                return r1;
            else
                return r2;
        }
    }
    public int r(int[] nums){
        int max=nums[0];
        for(int i=2;i<nums.length;i++){
            if(i>2&&nums[i-3]>nums[i-2])
                nums[i]+=nums[i-3];
            else
                nums[i]+=nums[i-2];
            if(nums[i]>max)
                max=nums[i];
        }
        return max;
    }
}

 

【动态规划】 LeetCode #213 打家劫舍 II(空间复杂度 O(1)) 题目链接: LeetCode #213 打家劫舍 II 题目描述: #213. 打家劫舍 II 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例 1: 输入: [2,3,2] 输出: 3 解释: 你不能先偷窃 1 号房 阅读详情

相关推荐

华为OD机试 - 跳格子2(Java)

小明和朋友玩跳格子游戏,有 n 个连续格子组成的圆圈,每个格子有不同的分数,小朋友可以选择以任意格子起跳,但是不能跳连续的格子,不能回头跳,也不能超过一圈;给定一个代表每个格子得分的非负整数数组,计算能够得到的最高分数。给定一个数例,第一个格子和最后一个格子首尾相连,如: 2 3 2。输出能够得到的最高分,如: 3。

qq_34143141的博客 281

LeetCode 213.打家劫舍II 动态规划详细解法

这道题目通过将圆形房屋问题转化为两个线性房屋问题来解决。动态规划的核心在于状态的转移和边界条件的处理,这种方法在处理类似问题时非常高效。

Lentr0py的博客 843

完整版:ultralytics下运行yoloworld并训练

本文介绍了Ultralytics YOLO环境的快速配置与使用流程:1) 通过conda创建Python 3.9环境并安装依赖包;2) 配置中科大镜像源加速安装PyTorch和Ultralytics;3) 准备YOLO格式数据集并修改data.yaml配置文件;4) 提供模型预测、训练和验证的常用指令,包括predict/train/val等命令参数设置。文章还包含CLIP模型下载、权重文件获取以及本地安装等注意事项,完整覆盖了从环境搭建到模型部署的全过程。

weixin_50209871的博客 1346

LeetCode 213. 打家劫舍 II【c++/java详细题解】

目录1、题目2、思路3、c++代码4、java代码 1、题目 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。 示例 1: 输入:nums = [2,3,2] 输出:3 解释:你不能先偷窃 1 号房屋(金额 =

林深不见鹿 的博客 4万+

Emuelec系统安装全流程:超详细版指南(从零开始)

手把手带你完成emuelec系统的完整安装,从基础准备到系统配置一步不落,适合新手入门。深入解析emuelec在各类设备上的部署技巧,让复古游戏体验更流畅。

weixin_42594419的博客 1974

使用KITTI数据集测试不同算法的性能

该文章将使用同一个kitti数据集来测试不同算法的性能,目前已经测试的算法包括:LIO-SAM,FAST-LIO2,Point-LIO,Faster-LIO。

wwtx的博客 2586

打家劫舍 II(Java算法每日一题)

问:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额。 例: 输入:nums = [2,3,2] 输出:3 答: class Solution { public int rob(int[] nums) {

wanjialin的博客 475

adb详细教程(四)-使用adb启动应用、关闭应用、清空应用数据、获取设备已安装应用列表

adb对于安卓移动端来说,是个非常重要的调试工具。通过ADB可以操作、管理设备上的应用。

公众号|软件测试老吴 3万+

LeetCode213—打家劫舍Ⅱ(java版)

题目描述: 标签:动态规划 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。 代码: 思路分析:动态规划五部曲 具体思路和 198打家劫舍 一样。不同的是因为成环了,所以只能在1~n-1...

qq_40840749的博客 328

海康VisionMaster图形定位实战:十字形Mark点精准匹配技巧

本文深入解析了海康VisionMaster图形定位模块在工业自动化中实现十字形Mark点精准匹配的实战技巧。文章从ROI设置、核心参数调优(如定位方式、尺度模式、对比度阈值)到工业场景应用与避坑指南,系统性地分享了提升匹配成功率和稳定性的关键步骤,帮助工程师应对复杂现场环境,实现高效、可靠的视觉定位。

weixin_29285605的博客 261

DIY玩家必备:用SSS1623芯片打造高性价比USB麦克风(附完整电路图)

本文详细介绍了如何利用SSS1623芯片DIY高性价比USB麦克风,包括元件选型、电路设计、PCB布局及调试技巧。通过完整的电路参考设计和实用建议,帮助电子爱好者打造专业级录音设备,实现免驱动即插即用功能。

weixin_29166013的博客 239

“打家劫舍”系列总结,偷不偷这个房间呢?(Java实现)

小偷这么聪明,为啥还要来偷?

CYK_byte的博客 2107

CTS实战:如何用set_sense优化时钟树平衡(附ICC2避坑指南)

本文深入探讨了在时钟树综合(CTS)中,如何正确使用`set_sense`命令优化时钟树平衡,并对比了其与`set_disable_timing`的本质区别。通过实战案例详细解析了`-stop_propagation`和`-clock_leaf`参数的应用场景,并提供了ICC2工具中的关键避坑指南,帮助后端工程师精准控制时钟拓扑,避免时序分析漏洞。

weixin_28933797的博客 460

力扣213 打家劫舍II java实现

题目描述了一个环形房屋的打家劫舍问题,要求在不触发警报(不能同时偷相邻房屋)的情况下获得最大金额。关键解法是将环形问题拆解为两个线性问题:分别计算去掉首尾房屋后的最大金额,然后取两者较大值。具体实现使用动态规划,通过两个数组分别记录从第一间到倒数第二间,以及从第二间到最后一间的最大金额。时间复杂度为O(n),空间复杂度为O(n)。示例验证了算法的正确性,如输入[2,3,2]输出3,[1,2,3,1]输出4。该解法有效避免了首尾房屋同时被选的问题。

m0_58648798的博客 135

PLC如何控制电子膨胀阀(暖通空调/制冷系统)

电子膨胀在冷水机空调系统里广泛采用,大部分空调系统都会有电子膨胀阀,但是电子膨胀阀的控制接口和普通电磁阀完全不同,所以想要PLC直接控制电子膨胀阀,还是比较麻烦的,电子膨胀阀可以理解为一个简易步进电机,体积非常小,线圈和转子部分可以分离。下面我们看下PLC如何控制电子膨胀阀。

RXXW_Dor的博客 4762

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java实现 LeetCode 213 打家劫舍 II(二)

213. 打家劫舍 II 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例 1: 输入: [2,3,2] ...

南 墙 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LeetCode 213.打家劫舍II

LeetCode 213.打家劫舍II 执行用时 :0 ms, 在所有 Java 提交中击败了100.00%的用户 序列型动态规划 本题和198.打家劫舍对比,房子由一序列升级到圈,那么需要将圈拆开,还可利用前题的题解。圈与序列不同的情况在于第一个房子,可分为两种情况: 偷第一个房子,那么不能偷第n-1个房子: 那么只需要考虑第1到n-2个房子。 不偷第一个房子 那么只需要考虑第2到n-1个房子...

未命名 355

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java刷题--213打家劫舍II

java刷题--213打家劫舍II题目代码结果 题目 代码 class Solution { public int rob(int[] nums) { int length = nums.length; if (length == 1) return nums[0]; else if (length == 2) return Math.max(nums[0], nums[1]); return Math.max(robRange(nu

Anrys的博客 195

LeetCode#213 打家劫舍II Java

@author: sdubrz @date: 2020.04.17 题号: 213 题目难度: 中等 考察内容: 动态规划 原题链接 https://leetcode-cn.com/problems/house-robber-ii/ 题目的著作权归领扣网络所有,商业转载请联系官方授权,非商业转载请注明出处。 解题代码转载请联系 lwyz521604#163.com 你是一个专业的小偷,计划偷窃沿...

仰起脸笑得像满月 293

【中等】力扣算法题解析LeetCode213:打家劫舍 II

房屋围成一圈的小偷问题,要求在不触发警报的情况下获取最大金额。核心思路是将环形问题拆分为两个单排问题:忽略首或尾房屋,分别计算最大金额后取较大值。使用动态规划优化空间复杂度至O(1),通过滚动变量prev和curr实现。代码处理了边界情况(如数组长度为1或2时),主函数调用辅助函数计算两个子区间的最大值。

ylumwd的博客 824

LeetCode刷题——213. 打家劫舍 II

LeetCode刷题——213. 打家劫舍 II

Maqiuqiu520的博客 324

备战秋招60天算法挑战,Day32

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。举个例子: 视频题解 打家劫舍 II 思路来源 思路来源 知识回顾 动态规划是一种通过将原问题分解为子问题来求解复杂问题的算法思想。它通常用于求解最优化问题,例如

溜达虎的博客 1033

力扣热门算法题 204.计数质数,207.课程表,213.打家劫舍II

​力扣热门算法题 204.计数质数,207.课程表,213.打家劫舍II,每题做详细思路梳理,配套Python&Java双语代码, 2025.07.07 可通过leetcode所有测试用例。

引用原创内容标明出处即可 1285
上一篇: LeetCode 63.不同路径 II Java实现
下一篇: LeetCode 122.买卖股票的最佳时机 Java实现
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值