当前位置: 首页 > news >正文

[动态规划] (十二) 简单多状态 LeetCode 213.打家劫舍II

[动态规划] (十二) 简单多状态: LeetCode 213.打家劫舍II

文章目录

      • [动态规划] (十二) 简单多状态: LeetCode 213.打家劫舍II
        • 题目解析
        • 解题思路
          • 状态表示
          • 状态转移方程
          • 初始化和填表顺序
          • 返回值
          • 提醒
        • 代码实现
        • 总结

213. 打家劫舍 II

image-20231107165029262

题目解析

本题是对打家劫舍和按摩师的升级题型,可以看完上一道题再来看下面的内容。

[动态规划] (十一) 简单多状态 LeetCode 面试题17.16.按摩师 和 198.打家劫舍-CSDN博客

(1) 房屋是环绕的,第一个房子和最后一个房子是紧挨着的

(2) 不能连续进入房子

(3) 返回最高金额

解题思路
状态表示

dp[i]:按照以往的经验,以i为结尾可以获得的最高的金额。

dp[i]又可以分为偷到i位置时,进入i房间(f[i])不进入i房间(g[i])。(详情可以点之前的链接。)

但是本题又不一样,多了个房屋环绕,如图。

image-20231107165806156

由于0号房间和n-1号房间是紧挨的,我们只能进入其中一个。

所以细分问题为:进入0号房或者不进入0号房。

  • 进入0号房

如果偷了0号房,那么我们首先就不能再进入1号,和n-1号。

剩下的2n-2号就是一个打家劫舍I的子问题:从2n-2号进行打家劫舍I。

  • 不进入0号房

如果不进入了0号房,那么我们可以划分1n-1号房为打家劫舍I的子问题,从1n-1号房进行打家劫舍I。

状态转移方程

和打家劫舍I一样。

  • f[i]

进入i号房间就不能进入i-1号房间。(与打家劫舍I、按摩师分析相同)

f[i] = g[i-1] + nums[i]
  • g[i]

不进入i号房,就要选择进入或者不进入i-1号房。(与打家劫舍I、按摩师分析相同)

g[i] = max(f[i-1], g[i-1])
初始化和填表顺序
  • 初始化

(与打家劫舍I、按摩师分析相同)

f[0] = nums[0], g[0] = 0;
  • 填表顺序

(与打家劫舍I、按摩师分析相同)

从左向右填表即可。

返回值

(与打家劫舍I、按摩师分析相同)

返回较大的那个金额即可。

提醒

仅仅是对问题进行分类,实际上还是打家劫舍I(按摩师)问题。

看到这里就可以去尝试实现代码了,然后再看下面的内容。


代码实现
class Solution {
public:int rob1(vector<int>& nums, int left, int right){if(left > right) return 0;//创建dp数组int n = nums.size();vector<int> f(n);vector<int> g(n);//初始化f[left] = nums[left];//填表for(int i = left+1; i <= right; i++){f[i] = g[i-1] + nums[i];g[i] = max(f[i-1], g[i-1]);}//返回值return max(f[right], g[right]);}int rob(vector<int>& nums) {int n = nums.size();return max(nums[0] + rob1(nums, 2, n-2), rob1(nums, 1, n-1));}
};

image-20231107170910244

总结

细节1:本质上是进行打家劫舍I(按摩师)问题,只需要划分好区间即可。

细节2:注意,如果left>right时,还进行填表就没有意义了

细节3:初始化时,我们从传进来的位置left初始化即可,填表从传进来的left+1开始。

细节4:返回值是最后一个位置的元素即为max(f[right], g[right])

细节5:大家都不要学习偷窃这种行为。

相关文章:

[动态规划] (十二) 简单多状态 LeetCode 213.打家劫舍II

[动态规划] (十二) 简单多状态: LeetCode 213.打家劫舍II 文章目录 [动态规划] (十二) 简单多状态: LeetCode 213.打家劫舍II题目解析解题思路状态表示状态转移方程初始化和填表顺序返回值提醒 代码实现总结 213. 打家劫舍 II 题目解析 本题是对打家劫舍和按摩师的升级题型&am…...

算法与数据结构之链表

链表的定义&#xff0c;相信大家都知道&#xff0c;这里就不赘述了只是链表分单向链表和双向链表&#xff0c;废话不多说&#xff0c;直接上代码 链表节点的定义&#xff1a; public class Node {int val;Node next;Node pre;public Node(int val, Node next, Node pre) {thi…...

深入剖析React Hooks中的 useCallback

前言 自 React 16.8 版本引入 Hooks 以来&#xff0c;useCallback 成为了前端开发者们越来越青睐的一个功能。useCallback 可以有效优化组件性能&#xff0c;尤其在处理函数式组件中的状态更新时。本文将详细介绍 useCallback 的用法及其注意事项。 1. useCallback 简介 use…...

微服务中配置文件(YAML文件)和项目依赖(POM文件)的区别与联系

实际上涉及到了微服务架构中的两个重要概念&#xff1a;服务间通信和项目依赖管理。在微服务架构中&#xff0c;一个项目可以通过两种方式与另一个项目建立依赖关系&#xff1a;通过配置文件&#xff08;如YAML文件&#xff09;和通过项目依赖&#xff08;如POM文件&#xff09…...

Java快速排序算法、三路快排(Java算法和数据结构总结笔记)[7/20]

一、什么是快速排序算法 快速排序的基本思想是选择一个基准元素&#xff08;通常选择最后一个元素&#xff09;将数组分割为两部分&#xff0c;一部分小于基准元素&#xff0c;一部分大于基准元素。 然后递归地对两部分进行排序&#xff0c;直到整个数组有序。这个过程通过 par…...

【React】05.JSX语法使用上的细节

水水水水水...

LeetCode 1759. 统计同质子字符串的数目【字符串】1490

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

FPGA UDP RGMII 千兆以太网(2)IDDR

1 xilinx原语 在 7 系列 FPGA 中实现 RGMII 接口需要借助 5 种原语,分别是:IDDR、ODDR、IDELAYE2、ODELAYE2(A7 中没有)、IDELAYCTRL。其中,IDDR和ODDR分别是输入和输出的双边沿寄存器,位于IOB中。IDELAYE2和ODELAYE2,分别用于控制 IO 口输入和输出延时。同时,IDELAYE2 …...

chrome安装vue devtools

不能访问应用商店 如果可以访问应用商店可以往下看 插件源代码 选择shell-chrome&#xff0c;这是官方的插件源码 下载源代码打包 参考教程 点击扩展按钮->管理扩展程序->打开开发者模式->把crx文件拖拽进去即可 可以访问chrome应用商店 插件地址 官方文档地址 选…...

【Docker】iptables命令的使用

iptables是一个非常强大的Linux防火墙工具&#xff0c;你可以使用它来控制网络流量的访问和转发。 前面已经学习了iptables的基本原理&#xff0c;四表五链的基本概念&#xff0c;也已经安装好了iptables&#xff0c;下面我们主要学习iptables命令的基本使用。 可以使用iptable…...

Flex bison 学习好代码

计算机的重要课程编译原理很难学吧&#xff0c; 但是要会用flex &bison的话&#xff0c;容易理解一些。 有些好的项目可以帮助我们&#xff0c;比如 https://github.com/jgarzik/sqlfun 可以帮我们&#xff0c;下载 下来。 在cygwin 下面或者linux 运行&#xff1a; …...

学习Nginx配置

1.下载地址 官网地址&#xff1a;NGINX - 免费试用、软件下载、产品定价 (nginx-cn.net) 我这边选择NGINX 开源版 nginx: download 2.nginx的基本配置 配置文件语法 配置文件组成&#xff1a;注释行&#xff0c;指令块配置项和一系列指令配置项组成。 单个指令组成&#x…...

怎么批量获取文件名,并保存到excel?

怎么批量获取文件名&#xff1f;什么叫批量获取文件名&#xff0c;其实也非常好理解&#xff0c;就是面对大量文件是可以一次性的获取所有文件名称&#xff0c;这项技术的应用也是非常常见的&#xff0c;为什么这么说呢&#xff1f;现在很多的文档管理人员或者公司的文员&#…...

数据结构: unordered_map与unordered_set

目录 1.框架 2.结构 unordered_map unordered_set 3.对HashTable的修改 更改模板参数 4.增加迭代器 a.结构 b.运算符重载 c.HashTable封装迭代器 d.unordered_map与unordered_set的迭代器 1.框架 1.复用HashTable ~~> 增加模板参数KeyOfT 来获取 Key值 unorder…...

WebDAV之π-Disk派盘 + PassStore

大家常用的qq,手机微信,新浪微博等。假如各个网址都设成同样的帐号和登陆密码,一旦某一帐户泄漏了,别的平台上的账户密码都有被撞库攻击的风险。在不一样的站点设定不一样的高韧性登陆密码才算是最安全可靠的确保,殊不知这般繁多的帐户密码是难以记得的。因而,有着一款安…...

OpenCV实现手势虚拟拖拽

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用OpenCV实现手势虚拟拖拽&#xff0c;欢迎大家一起前来探讨学习~ 一、主要步骤及库的功能介绍 1.主要步骤 要实现本次实验&#xff0c;主要步骤如下&#xff1a; 导入OpenCV库。通过OpenCV读取摄…...

深圳市宝安区委常委、宣传部部长周学良一行莅临联诚发考察调研

11月9日&#xff0c;深圳市宝安区组织开展主题教育“大走访、大座谈、大起底”行动和调查研究、“基层调研服务日”活动。当日上午&#xff0c;区委常委、宣传部部长周学良率调研组莅临联诚发LCF总部考察调研。区委宣传部副部长孙箫韵&#xff0c;区文化广电旅游体育局党组成员…...

Presentation Prompter 5.4.2(mac屏幕提词器)

Presentation Prompter是一款演讲辅助屏幕提词器软件&#xff0c;旨在帮助演讲者在公共演讲、主持活动或录制视频时更加流畅地进行演讲。以下是Presentation Prompter的一些特色功能&#xff1a; 提供滚动或分页显示&#xff1a;可以将演讲稿以滚动或分页的形式显示在屏幕上&a…...

9 网关的作用

1、总结&#xff1a; 1.如果离开本局域网&#xff0c;就需要经过网关&#xff0c;网关是路由器的一个网口。 2.路由器是一个三层设备&#xff0c;里面有如何寻找下一跳的规则 3.经过路由器之后 MAC 头要变&#xff0c;如果 IP 不变&#xff0c;相当于不换护照的欧洲旅游&#…...

计算机网络实验

计算机网络实验 使用软件PT7.0按照上面的拓扑结构建立网络&#xff0c;进行合理配置&#xff0c;使得所有计算机之间能够互相通信。并且修改各交换机的系统名称为&#xff1a;学号_编号&#xff0c;如你的学号为123&#xff0c;交换机Switch0的编号为0&#xff0c;则系统名称为…...

3分钟解锁你的网易云音乐:ncmdump让加密NCM文件变通用MP3

3分钟解锁你的网易云音乐&#xff1a;ncmdump让加密NCM文件变通用MP3 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否遇到过这样的烦恼&#xff1f;在网易云音乐下载的歌曲只能在特定客户端播放&#xff0c;想要在其他设备或软…...

别再只盯着DAC了!深入WM8978的DSP内核:5段EQ、ALC与降风噪实战配置指南

解锁WM8978的DSP潜能&#xff1a;从5段EQ到风噪消除的嵌入式音频实战 在嵌入式音频系统设计中&#xff0c;WM8978这颗集成了DSP内核的编解码芯片常被简化为一个普通的数模转换模块。但当我们深入其数字信号处理单元时&#xff0c;会发现一片被多数开发者忽视的"音效实验室…...

Arm Lumex内存映射架构与安全设计解析

1. Arm Lumex内存映射架构解析在嵌入式系统和物联网设备开发中&#xff0c;理解内存映射机制是底层开发的基础功。Arm Lumex参考软件的内存映射设计体现了现代SoC架构的典型特征&#xff0c;通过精心规划的地址空间划分&#xff0c;实现了硬件资源的高效管理和安全隔离。1.1 内…...

2026 年短视频文案提取怎么选?哪种在线工具转得准、哪些方法不用下载?

做短视频文案提取的时候&#xff0c;经常卡在两件事上&#xff1a;一是视频链接发过来&#xff0c;不想下载整个文件就能把口播文案扒出来&#xff1b;二是转出来的文字错漏一多&#xff0c;校对比重新听一遍还花时间。这类需求在 2026 年已经不算小众&#xff0c;方案也分了几…...

GPON与EPON技术对比:光纤接入网的核心选择

1. 光纤接入网的技术十字路口&#xff1a;当GPON遇上EPON在光纤到户&#xff08;FTTH&#xff09;的部署现场&#xff0c;我经常被运营商工程师问到一个经典问题&#xff1a;"GPON和EPON到底该选哪个&#xff1f;"这个看似简单的选择题背后&#xff0c;其实涉及光接入…...

STM32CubeMX + Keil 实战:手把手教你用SPI轮询读取W25Q128的制造商和设备ID(附完整代码)

STM32CubeMX Keil实战&#xff1a;从零开始用SPI读取W25Q128芯片ID 第一次接触SPI通信时&#xff0c;看着开发板上密密麻麻的引脚和陌生的术语&#xff0c;我完全不知道从何入手。直到导师递给我一块W25Q128闪存模块说&#xff1a;"试试用SPI读出它的身份证号码"&am…...

2025届毕业生推荐的六大AI科研工具实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于内容创作范畴里&#xff0c;降低AIGC率有着重大意义&#xff0c;这表明得尽量削减算法生成…...

MATLAB数据分析实战:用var函数处理实验数据,别再只会求平均值了

MATLAB数据分析实战&#xff1a;用var函数处理实验数据&#xff0c;别再只会求平均值了 在实验室里盯着屏幕上一串串数字发呆时&#xff0c;我们常习惯性敲入mean()函数求平均值&#xff0c;却忽略了数据背后更重要的故事——波动性。去年处理卫星温度传感器数据时&#xff0c;…...

从‘永久测试版’到LTS:聊聊软件版本命名背后的产品哲学与团队协作

从‘永久测试版’到LTS&#xff1a;软件版本命名背后的产品哲学与团队协作 当Gmail在2004年推出时&#xff0c;它带着一个鲜红的"BETA"标签——这个标签持续了整整五年。这种看似反常的现象背后&#xff0c;隐藏着科技行业对软件成熟度定义的深刻变革。版本号不再只是…...

从Grafana到KubePi:手把手教你排查并修复10个常见开源工具的默认弱口令风险

从Grafana到KubePi&#xff1a;10个云原生工具的默认凭证风险与自动化加固实战 在云原生技术栈的快速迭代中&#xff0c;安全往往成为最先被妥协的环节。去年某金融科技公司的数据泄露事件调查显示&#xff0c;攻击者正是通过未修改的Grafana默认凭证&#xff08;admin/admin&a…...