Leetcode 213. 打家劫舍 II

ops/2024/10/21 5:34:02/

原题链接:. - 力扣(LeetCode)

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

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

示例 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 <= nums.length <= 100
  • 0 <= nums[i] <= 1000

思路:

本题与 打家劫舍 的区别在于前者的 最后一个房子和第一个房子是相邻的。即是环形的。用 f [ i ] 表示 前 i 个房子能偷盗的最大价值。如果偷盗第一个房子,则 第二个和最后一个房子不能偷盗,即剩下的偷盗范围是 第三个房子至倒数第二个房子。如果不偷盗第一个房子,则剩下的偷盗范围是第二个房子至最后一个房子。

代码:

class Solution {public int rob(int[] nums) {int n = nums.length;return Math.max(nums[0]+rob(nums,2,n-1),rob(nums,1,n));}int rob(int[] nums,int start,int end){//[start,end)左闭右开//f[i]表示前i个房子中偷盗的金额最大值int f0 = 0, f1 = 0;for(int i=start;i<end;i++){int newF = Math.max(f1, f0 + nums[i]);f0 = f1;f1 = newF;}return f1;}
}

参考:. - 力扣(LeetCode)


http://www.ppmy.cn/ops/118370.html

相关文章

【含文档】基于Springboot+微信小程序 的高中信息技术课程在线测试系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 当游客…

每天学习一个技术栈 ——【Django Channels】篇(1)

在当今快速发展的技术领域&#xff0c;掌握多种技术栈已经成为开发者提升竞争力的关键。随着实时应用需求的不断增加&#xff0c;如何高效地处理并发请求和实时通信变得尤为重要。在众多解决方案中&#xff0c;Django Channels作为Django框架的强大扩展&#xff0c;能够轻松实现…

java网络编程知识点,以及面试常被问的知识点

Java网络编程详解 Java网络编程是Java编程语言中用于实现网络通信的功能&#xff0c;它允许Java应用程序之间以及Java应用程序与其他类型的网络应用程序&#xff08;如Web服务器、数据库服务器等&#xff09;之间进行数据交换。以下是Java网络编程的详细讲解&#xff0c;包括常…

从事新闻、出版、教育、药品和医疗器械、文化、广播电影电视节目等互联网信息服务小程序备案说明

根据《互联网信息服务管理办法》、《非经营性互联网信息服务备案管理办法》规定&#xff0c;从事新闻、出版、教育、药品和医疗器械、文化、广播电影电视节目等互联网信息服务&#xff0c;依照法律、行政法规以及国家有关规定须经有关主管部门审核同意的&#xff0c;在履行备案…

Maven(1)什么是Maven?

Maven是一个项目管理和构建自动化工具&#xff0c;它主要用于Java项目的构建、依赖管理和项目信息管理。Maven的核心理念是提供一个统一的构建系统、项目信息管理以及最佳实践指南&#xff0c;帮助开发者更有效地管理Java项目的构建、报告和文档。Maven通过使用XML配置文件&…

数据结构:树、森林

二叉树与树结构差异 树&#xff08;一般树&#xff09;&#xff1a;树是一种数据结构&#xff0c;其中每个节点可以有任意数量的子节点&#xff08;除了根节点和叶子节点外&#xff09;。因此&#xff0c;一般树的节点在数组中的表示并不是那么直接&#xff0c;特别是当树不是完…

InnoDB架构

文章目录 内存结构Buffer PoolChange Buffer自适应哈希索引 Adaptive Hash IndexLog Buffer 磁盘结构System TablespaceFile-Per-Table TablespaceGeneral TablespaceUndo Tablespace临时表空间Double Write Buffer 文件 首先&#xff0c;先给出官网的一张InnoDB的架构图。Inno…

Array.prototype.slice.call()

Array.prototype.slice.call arguments 举例子 Array.prototype.slice.call(arguments); 这行代码在JavaScript中经常被用来将类数组对象&#xff08;如函数的arguments对象&#xff09;转换成一个真正的数组。这里解释一下为什么需要这样做以及这行代码是如何工作的。 为什…