OJ练习第175题——打家劫舍 II

2023-09-18 10:28:45

打家劫舍 II

力扣链接:213. 打家劫舍 II

题目描述

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

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

示例

在这里插入图片描述

题解

首先考虑最简单的情况。如果只有一间房屋,则偷窃该房屋,可以偷窃到最高总金额。如果只有两间房屋,则选择其中金额较高的房屋进行偷窃,可以偷窃到最高总金额。

当房屋数量不超过两间时,最多只能偷窃一间房屋,因此不需要考虑首尾相连的问题。如果房屋数量大于两间,就必须考虑首尾相连的问题,第一间房屋和最后一间房屋不能同时偷窃。

假设数组 nums的长度为 n。如果不偷窃最后一间房屋,则偷窃房屋的下标范围是 [0,n−2];如果不偷窃第一间房屋,则偷窃房屋的下标范围是 [1,n−1]。

再用动态规划做。

Java代码

class Solution {
    public int rob(int[] nums) {
        int len = nums.length;
        if(len == 1) return nums[0];
        if(len == 2) return Math.max(nums[0], nums[1]);
        return Math.max(robRange(nums, 0, len - 2), robRange(nums, 1, len - 1));
    }
    public int robRange(int[] nums, int start, int end) {
        int first = nums[start], second = Math.max(nums[start], nums[start + 1]);
        for(int i = start + 2; i <= end; i++) {
            int temp = second;
            second = Math.max(first + nums[i], second);
            first = temp;
        }
        return second;
    }
}
更多推荐

水一下文章

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。文章使用到的的工具Python:一种编程语言,只能进行后端数据的处理和管理前端HTML文件,不能用来处理HTTP请求Nginx:web服务

Vue浏览器缓存sessionStorage+localStorage+Cookie

目录sessionStorage简介方法代码示例存取单个数据存取对象清除数据localStorage简介方法代码示例cookie简介方法代码示例区别sessionStorage与localStorage区别sessionStorage、localStorage、cookie区别sessionStorage简介-sess

前端如何实现隐藏滚动条,并且页面还可以滚动

在前端中,可以通过CSS和一些简单的样式调整来实现隐藏滚动条,同时保持页面可滚动。这通常涉及到在容器内部创建滚动区域,并隐藏默认的滚动条样式。下面是实现这一效果的基本步骤:创建一个滚动容器元素,使其包裹需要滚动的内容。通过CSS隐藏默认的滚动条样式,并设置容器的高度、宽度以及overflow属性来实现滚动效果。示例代码

数据治理-大数据与数据科学-定义大数据战略与业务需求

组织试图解决什么问题,需要分析什么虽然数据科学的优点是它可以为组织提供一个新的视角,但该组织仍然需要一个起点。一个组织可以决定如何使用这些数据来理解业务或业务环境,证明关于新产品价值的想法,探索未知的事物,或者发明一种新的商业方法。在项目实施的各个阶段,制订一个评估这些举措的计划非常重要,并且需要在多个时间点评估该计划

golang并发编程基础

go并发编程1waitgroupWaitGroup就是等待所有的goroutine全部执行完毕,add方式和Down方法要配套使用packagemain​import("fmt""sync")​funcmain(){varwqsync.WaitGroup​wq.Add(100)//监控多少个goroutine执行结束​

进程间通信(IPC)的方法:UNIX域套接字

UNIX域套接字(UNIXdomainsocket)为我们提供了一种在进程之间建立通信通道的便捷方法,具有许多有用的内置功能。它支持面向流(TCP)和面向数据报(UDP)协议作为TCP/IP互联网套接字。我们还可以在阻塞和非阻塞模式之间进行选择。首先需要创建套接字并在套接字函数中指定AF_UNIX作为域套接字。创建套接

超轻巧的电竞鼠标,手感不错反应精准,雷柏VT9Pro体验

作为一家国内很受欢迎的外设厂商,雷柏近年推出了不少很有创新性的产品,像是之前主打轻量化的鼠标VT9,凭借78g的超轻重量,以及模块化的设计,得到了了广大游戏玩家的认可。最近雷柏在此基础上又推出了一款VT9Pro,这次体积更轻,并且加入了自研的C+click分离式按键预压校调技术,还支持4KHz超高回报率,目前我就在用这

【Express.js】软件构建

软件构建运行node项目,一般都是直接运行源码,不过这样子部署的时候不太方便,需要拷贝整个文件夹,如果是需要交付给客户的,并且客户不需要源码,客户不懂编程知识的话,你丢给他一堆源码让该怎么让他运行呢?Java可以打包成jar/war,C/C++可以打包为exe,Node也迫切需要一种可靠的构建技术。前端的朋友们可能都熟

《算法竞赛进阶指南》0x55 环形与后效性处理

0x55环形与后效性处理休息时间题意:一天有nnn个小时,在第iii个小时睡觉恢复体力uiu_iui​。一头牛一天要休息bbb个小时,可以分成多段。每一段需要花费一个小时才能睡着,这一个小时不恢复体力。询问恢复体力的最大值。解析:可以考虑dp。第一维是每天的时间,第二维是已经休息的时间。转移的时候需要知道当前休息的这一

面试官:你是怎么理解ES6中 Decorator 的?使用场景?

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录一、介绍二、用法类的装饰类属性的装饰注意三、使用场景@antobind@readonly@deprecate一、介绍Decorator,即装饰器,从名字上很容易让我们联想到装饰者模式简单来讲,装饰者模式就是一种

Java 21 正式发布!新特性专栏继续更起来了~

就在昨天晚间,Oracle公司宣布Java21正式发布。该版本是继JDK17之后最新的长期支持版本(LTS),将获得至少8年的支持!Java21号称具有数千项性能、稳定性和安全性改进。新的JDK21包括对15项改进的抢先体验,这些增强功能是在OracleCloudWorld2023会议上宣布的,包括支持虚拟线程以提高整

热文推荐