动态规划专练( 231.打家劫舍Ⅱ)
231.打家劫舍Ⅱ
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。
给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。
示例 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 <= 1000 <= nums[i] <= 1000
题解:
本题在198.打家劫舍的基础上进行了变化,将首尾两个元素连成了环,成环之后思考的难度提高了很多,因为如过要使用动态规划的话,不知道从哪个位置开始。
因此第一步是将本题进行转换。首尾成环相较于没有成环,其实是多了三种情况。
- 情况一:我不考虑首尾元素,只考虑中间部分
- 情况二:我不考虑尾元素,只考虑首元素和中间部分
- 情况三:我不考虑首元素,只考虑中间部分和尾元素
在这三种情况中,其实情况一的值一定是小于等于情况二和情况三的。因为情况二和三考虑的范围包括住了情况一,在一个更大的范围内求解最大值,一定是大于等于的关系。
因此可以将情况二和情况三分别拆分成两个数组,送入到198.打家劫舍的算法中,再取最大值即可.
package com.offer;/*** @author bwzfy* @create 2024/4/16**/
public class _213打家劫舍Ⅱ {public static void main(String[] args) {System.out.println(rob(new int[]{2, 3, 2}));}public static int rob(int[] nums) {if (nums.length == 1) {return nums[0];}// 三种选择// 两头都不考虑(这种情况其实包含在了下面两种情况中,因此只要考虑下面两种情况下的最大值就可以了)// 只考虑头// 只考虑尾return Math.max(rob(nums, 0, nums.length - 2), rob(nums, 1, nums.length - 1));}private static int rob(int[] nums, int left, int right) {if (right == left) {// 如果只有一个元素直接返回return nums[left];}int[] dp = new int[right - left + 1];// 只考虑一户人家的时候,最多能拿多少钱dp[0] = nums[left];// 只考虑两户人家的时候,最多能拿多少钱dp[1] = Math.max(nums[left], nums[left + 1]);for (int i = 2; i <= right - left; i++) {dp[i] = Math.max(dp[i - 1], nums[left + i] + dp[i - 2]);}return dp[right - left];}
}相关文章:
动态规划专练( 231.打家劫舍Ⅱ)
231.打家劫舍Ⅱ 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间…...
K-means和逻辑回归
逻辑回归 一个事件的几率是该事件发生的概率/该事件不发生的概率:P/(1-P) 对数几率是:log(P/(1-P)) **考虑对输入x分类的模型:**log(P/(1-P))wx 则 Pexp(wx)/(exp(w*x)…...
3.2 iHRM人力资源 - 组织架构 - 编辑及删除
iHRM人力资源 - 组织架构 文章目录 iHRM人力资源 - 组织架构一、编辑功能1.1 表单弹层并数据回显1.2 编辑校验1.3 编辑 二、删除功能 一、编辑功能 编辑功能和新增功能用的组件其实是一个,结构几乎是一样的,其实是复用了组件,我们也省去了很…...
支付系统核心逻辑 — — 状态机(JavaGolang版本)
支付系统核心逻辑 — — 状态机 代码地址:https://github.com/ziyifast/ziyifast-code_instruction/tree/main/state_machine_demo 1 概念:FSM(有限状态机),模式之间转换 状态机,也叫有限状态机(…...
rest_framework_mongoengine实现后端的增删改查
rest_framework_mongoengine实现后端增删改查 一、增删改查 1. 继承ModelViewSet实现增删改查 父urls.py path("api/testapp/", include("apps.testapp.urls")), # 测试子urls.py # -*- coding: utf-8 -*- from django.urls import path from res…...
【精读文献】Scientific data|2017-2021年中国10米玉米农田变化制图
论文名称:Mapping annual 10-m maize cropland changes in China during 2017–2021 第一作者及通讯作者:Xingang Li, Ying Qu 第一作者单位及通讯作者单位:北京师范大学地理学部 文章发表期刊:《Scientific data》(…...
高光谱图像修复笔记
目录 RetinexFormer 也有MST-plus-plus代码,分辨率可以调 MST-plus-plus github地址: WACV2023 DSTrans RetinexFormer GitHub - caiyuanhao1998/Retinexformer: "Retinexformer: One-stage Retinex-based Transformer for Low-light Image E…...
GPS定位原理及应用分析
一.定位原理 1.卫星定位(GPS,北斗导航) ①.硬件构成(24颗卫星,可构建一套导航系统) 为何是24颗卫星? 可以做到全球覆盖,同一地点地球上空可观测到4颗卫星。 …...
Java面试篇9——并发编程
并发编程知识梳理 提示,此仅为面试,若想对线程有跟完整了解,请点击这里 提示:直接翻到最后面看面试真题,上面的为详解 面试考点 文档说明 在文档中对所有的面试题都进行了难易程度和出现频率的等级说明 星数越多代表…...
[RK3399 Linux] 使用busybox 1.36.1制作rootfs
一、 编译、安装、配置 busybox 1.1 下载源码 根文件系统是根据busybox来制作的。 下载地址:https://busybox.net/downloads/。 这里就以1.36.1版本为例进行编译安装介绍: 注意:编译linux内核与文件系统中的所有程序要使用相同的交叉编译器。 下载完成后解压: mkdir …...
JavaScript入门--循环
JavaScript入门--循环 一、for循环二、for in语句三、break语句四、continue语句五、while循环六、do-while语句一、for循环 先来看一个循环案例: for (i = 0; i < 5; i++) {...
【Delphi 爬虫库 1】GET和POST方法
文章目录 1.最简单的Get方法实现2.可自定义请求头、自定义Cookie的Get方法实现3.提取响应协议头4.Post方法实现单词翻译 爬虫的基本原理是根据需求获取信息并返回。就像当我们感到饥饿时,可以选择自己烹饪食物、外出就餐,或者订外卖一样。在编程中&#…...
[leetcode] 快乐数 E
:::details 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1…...
Lobe UI - 基于 AntDesign 开发的 AIGC Web 应用的开源 UI 组件库
今天推荐一个可以快速开发 ChatGPT UI 界面的组件库,质量很高,拿来就能用。 Lobe UI 是由 lobehub 团队开发的一套 web UI 组件库,和我之前推荐的很多通用型的 UI 组件库不同,Lobe UI 是专门为目前火热的 AIGC 应用开发而打造&am…...
Java常用类 -- Random类
该类实例用于生成伪随机数的流 伪随机数:通过算法算出来的数,是假的随机数 (一)具体使用 public static void main(String[] args) { Random r new Random(); System.out.println("随机出int类型的数据" r.nextIn…...
Docker安装Kong网关
文章目录 一、kong是什么?二、搭建步骤1.搭建PostgreSQL2.搭建Kong网关2.1、制作镜像2.2、数据库初始化2.3、启动Kong网关一、kong是什么? Github地址:https://github.com/Kong/kong Kong是一个可扩展、开源的云原生API网关,可以在分布式环境中管理、监控和安全地发布API…...
spispispi
SPI C.. & C.. logic是SPI的控制逻辑,芯片内部进行地址锁存、数据读写等操作,都是由控制逻辑自动完成。控制逻辑的左边是SPI的通信引脚,这些引脚和主控芯片相连,主控芯片通过SPI协议,把指令和数据发送给控制逻辑&a…...
MySQL——创建和插入
一、插入数据 INSERT 使用建议; 在任何情况下建议列出列名,在 VALUES 中插入值时,注意值和列的意义对应关系 values 指定的值顺序非常重要,决定了值是否被保存到正确的列中 在指定了列名的情况下,你可以仅对需要插入的列给到…...
【BUG】element-ui表格中使用video标签,数据翻页,video中的视频仍然显示第一页的视频,没有重新加载
BUG描述 遇到一个问题,使用element-ui构建的管理端后台,表格里面每一行都有一个video标签,里面有视频,当我翻页了以后,视频不会重新加载,仍然显示的是第一页的视频,代码如下: <e…...
【JavaSE】你真的了解内部类吗?
前言 本篇会详细讲解内部类的四种形式,让你掌握内部类~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 内部类介绍 实例内部类 定义 调用 静态内部类 定义 调用 匿名内部类 定义和调用1 调用方法2 …...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 :进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
