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

1997. 访问完所有房间的第一天

题目

你需要访问 n 个房间,房间从 0 到 n - 1 编号。同时,每一天都有一个日期编号,从 0 开始,依天数递增。你每天都会访问一个房间。

最开始的第 0 天,你访问 0 号房间。给你一个长度为 n 且 下标从 0 开始 的数组 nextVisit 。在接下来的几天中,你访问房间的 次序 将根据下面的 规则 决定:

假设某一天,你访问 i 号房间。
如果算上本次访问,访问 i 号房间的次数为 奇数 ,那么 第二天 需要访问 nextVisit[i] 所指定的房间,其中 0 <= nextVisit[i] <= i 。
如果算上本次访问,访问 i 号房间的次数为 偶数 ,那么 第二天 需要访问 (i + 1) mod n 号房间。
请返回你访问完所有房间的第一天的日期编号。题目数据保证总是存在这样的一天。由于答案可能很大,返回对 109 + 7 取余后的结果。

示例 1:

输入:nextVisit = [0,0]
输出:2
解释:

  • 第 0 天,你访问房间 0 。访问 0 号房间的总次数为 1 ,次数为奇数。
    下一天你需要访问房间的编号是 nextVisit[0] = 0
  • 第 1 天,你访问房间 0 。访问 0 号房间的总次数为 2 ,次数为偶数。
    下一天你需要访问房间的编号是 (0 + 1) mod 2 = 1
  • 第 2 天,你访问房间 1 。这是你第一次完成访问所有房间的那天。
    示例 2:

输入:nextVisit = [0,0,2]
输出:6
解释:
你每天访问房间的次序是 [0,0,1,0,0,1,2,…] 。
第 6 天是你访问完所有房间的第一天。
示例 3:

输入:nextVisit = [0,1,2,0]
输出:6
解释:
你每天访问房间的次序是 [0,0,1,1,2,2,3,…] 。
第 6 天是你访问完所有房间的第一天。

思路

根据题意,要访问房间 i,必须先恰好访问房间 i-1 两次。我们可以定义 dp[i] 为第一次访问房间 i 所需天数。那么我们有:

dp[i] = dp[i-1] + 1 (根据 nextVisit[i-1] 跳回前面房间) + (从 nextVisit[i-1] 返回 i-1 所需天数) + 1 (从 i-1 前进到 i)

又因为只有访问房间 i-1 偶数次才能前往房间 i,当第一次访问房间 i-1 时,必然恰好访问了房间 i-2 两次。当第二次访问房间 i-1 时,必然访问房间 i-2 偶数次。由此我们可以推导出,第一次访问房间 i-1 时,房间 0 ~ i-2 的访问次数都是偶数。那么,当我们从房间 i-1 跳回到访问房间 nextVisit[i-1] 时,房间 nextVisit[i-1] 恰好被访问了奇数次,这就相当于第一次到达 nextVisit[i-1],然后从房间 nextVisit[i-1] 到达房间 i-1。于是可以得到:

从 nextVisit[i-1] 返回 i-1 所需天数 = dp[i-1] - dp[nextVisit[i-1]]

综上,可以得到:

dp[i] = dp[i-1] * 2 - dp[nextVisit[i-1]] + 2

代码

// From the rule, to visit room-i for the first time, we must have visited room-i-1 exactly two times and proceed to room-i.
//
// Define dp[i] to be the # of days taken to visit room-i for the first time.
// Mark x as (# of days taken to get back to room-i-1 the second time).
// dp[i] = dp[i-1] + 1 + x + 1
//
// From the rule, we have:
// When room-i is visited for the first time, room-i-1 must be visited two times.
// When room-i-1 is being visited for the second time, room-i-2 must be visited even times.
// => the first time we visit room-i-1, # of times we have visited room 0~i-2 are even.
//
// From dp[i-1] we jump back to room nextVisit[i-1] and make its visit times odd,
// which makes it the same case as the first time to find a way from nextVisit[i-1] to room-i-1 (takes dp[i-1] - dp[nextVisit[i-1]] days).
// => x = dp[i-1] - dp[nextVisit[i-1]]
//
// To sum up, we have:
// dp[i] = dp[i-1] * 2 - dp[nextVisit[i-1]] + 2
class Solution {
public:int firstDayBeenInAllRooms(vector<int>& nextVisit) {constexpr int mod = 1e9+7;vector<int64_t> dp(nextVisit.size());dp[0] = 0;dp[1] = 2;for (int i = 2; i < nextVisit.size(); i++) {dp[i] = (dp[i-1] - dp[nextVisit[i-1]] + dp[i-1] + 2 + mod) % mod;}return dp[nextVisit.size()-1];}
};

相关文章:

1997. 访问完所有房间的第一天

题目 你需要访问 n 个房间&#xff0c;房间从 0 到 n - 1 编号。同时&#xff0c;每一天都有一个日期编号&#xff0c;从 0 开始&#xff0c;依天数递增。你每天都会访问一个房间。 最开始的第 0 天&#xff0c;你访问 0 号房间。给你一个长度为 n 且 下标从 0 开始 的数组 n…...

通达信交易接口以什么形式执行下单的?

通达信程交易接口 以API形式来执行下单接口&#xff0c;一般不再需要通过接口系统之间进行连接&#xff0c;通过直接调用通达信dll交易函数的方式直接进行交易&#xff0c;包括下单&#xff0c;撤单&#xff0c;查询资金股份、当日委托、当日成交等方面都能很快的执行出来。以a…...

CobaltStrike上线微信通知

CobaltStrike上线微信通知 利用pushplus公众号&#xff08;每天免费发送200条消息&#xff09; http://www.pushplus.plus/push1.html 扫码登录后需要复制token 可以测试一下发送一下消息&#xff0c;手机会受到如下消息。可以在微信提示里将消息免打扰关闭&#xff08;默认…...

喜茶、奈雪的茶“花式”寻生路

配图来自Canva可画 疫情全面开放不少人“阳了又阳”&#xff0c;电解质饮品成为热销品&#xff0c;梨子、橘子、柠檬等水果被卖断货&#xff0c;凉茶、黄桃罐头被抢购一空&#xff0c;喜茶的“多肉大橘”、奈雪的“霸气银耳炖梨”、蜜雪冰城的“棒打鲜橙”、沪上阿姨的“鲜炖整…...

Xstream使用教程

1.Xstream介绍 官网&#xff1a;https://x-stream.github.io/tutorial.html 介绍&#xff1a;XStream 对象序列化和反序列化为 XML的一个JAVA类库。JDK 1.4以上适用。 PS:与JAXB相比&#xff0c;Xstream更好用一些&#xff0c;像XStreamImplicit这种注解&#xff0c;我在JAX…...

【正点原子FPGA连载】第十一章PL SYSMON测量输入模拟电压 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十一章PL SYSM…...

纷享销客百思特 | 数字化营销赋能企业新增长沙龙圆满落幕

为进一步帮助企业客户实现数字化转型&#xff0c;纷享销客联合百思特管理咨询集团&#xff0c;于2月10日举办 “数字化营销赋能企业新增长”主题沙龙。本次活动以“新变革新增长”为主题&#xff0c;现场30余位制造企业高管齐聚一堂&#xff0c;共同探讨企业如何在当前复杂的宏…...

oracle查看具体表占用空间 oracle查看表属于哪个用户

文章目录前言oracle查看具体表占用空间1、查看表空间总大小、使用率、剩余空间2、查看具体表的占用空间大小3、查看表空间对应日志文件oracle查看表属于哪个用户1、oracle怎么查看表属于哪个用户2、Oracle查询视图所属用户3、Oracle查询存储过程所属用户总结前言 表空间是数据…...

2.Visual Studio下载和安装

Visual Studio 是微软提供的一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于为 Windows 系统开发应用程序。Visual Studio 提供了构建 .Net 平台应用程序的一站式服务&#xff0c;可以使用 Visual Studio 开发、调试和运行应用程序。 1、Visual Studio下载 …...

「4」线性代数(期末复习)

&#x1f680;&#x1f680;&#x1f680;大家觉不错的话&#xff0c;就恳求大家点点关注&#xff0c;点点小爱心&#xff0c;指点指点&#x1f680;&#x1f680;&#x1f680; 目录 第四章 向量组的线性相关性 &2&#xff09;向量组的线性相关性 &3&#xff09;向…...

IDEA中使用tomcat8-maven-plugin插件

第一种方式 pom.xml <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.or…...

2023年妇女节是哪一天 妇女节是2023年几月几日?

2023年妇女节是哪一天是2023年几月几日&#xff1f; 2023年妇女节是2023年3月8日 三八妇女节是国家法定节假日吗&#xff1f; 妇女节不是国家法定节假日&#xff0c;而国家法定节假日包括&#xff1a;元旦、春节、清明节、劳动节、端午节、中秋节、国庆节&#xff1b; 关于三…...

如何运维多集群数据库?58 同城 NebulaGraph Database 运维实践

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SktQW2qn-1676450580889)(https://www-cdn.nebula-graph.com.cn/nebula-website-5.0/images/blogs/58.%20Com%20Inc/58%E5%90%8C%E5%9F%8E_%E7%94%BB%E6%9D%BF%201.jpg)] 图计算业务背景介绍 我们为什…...

尚医通(十四)Spring Cloud GateWay网关 | 跨域 | 权限认证

目录一、网关基本概念1、API网关介绍2、Spring Cloud Gateway3、Spring Cloud Gateway核心概念二、创建service_gateway模块&#xff08;网关服务&#xff09;1、创建service_gateway模块2、在pom.xml引入依赖3、编写application.properties配置文件4、编写启动类5、前端端口号…...

PO模式在Selenium中简单实践

初识PO模式 PO&#xff08;PageObject&#xff09;是一种设计模式。简单来说就是把一些繁琐的定位方法、元素操作方式等封装到类中&#xff0c;通过类与类之间的调用完成特定操作。 PO被认为是自动化测试项目开发实践的最佳设计模式之一。 在学习PO模式前&#xff0c;可以先…...

KubeSphere

文章目录一、概述二、最小化安装 KubeSphere2.1 前提2.2 安装 nfs 服务器一、概述 KubeSphere是在Kubernetes之上构建的以应用为中心的企业级分布式容器平台&#xff0c;提供简单易用的操作界面以及向导式操作方式&#xff0c;在降低用户使用容器调度平台学习成本的同时&#…...

JAVA基础阶段面试题(关键点)必备

1、简述什么是 JDK、JRE 和 JVM&#xff1f; JDK : 开发工具包JRE : 运行时环境JVM : java虚拟机2、写出Java的四类八种基本数据类&#xff1f;整数 byte short int long小数(浮点) float double布尔 boolean字符 char3、& 和 && 的区别 ?& 符号的左右两边,无…...

Shiro简介

介绍 ApacheShiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完成:认证、授权、加密、会话管理、与 Web集成、缓存等。借助Shiro 您可以快速轻松地保护任何应用程序一一从最小的移动应用程序到最大的 Web 和企业应用程序。 1.2:为什么要用 shiro 自2003年以…...

cmu 445 poject 3笔记

2022年的任务 https://15445.courses.cs.cmu.edu/fall2022/project3/ task1, 从磁盘读取数据的算子 task2, 聚合和join算子 task3, sort,limit,topn算子&#xff0c;以及sortlimit->TopN优化 leaderboard没做 本文不写代码&#xff0c;只记录遇到的一些思维盲点 Task1 scan…...

CHAPTER 2 Zabbix界面操作

Zabbix界面操作2.1 Zabbix界面操作1.zabbix的web界面安装2.添加监控信息3.查看监控内容4.查看图像2.2 自定义监控与监控报警1.自定义监控1.1 说明1.2 预备知识2.实现自定义监控2.1 自定义语法2.2 agent注册2.3 在server端注册(web操作)2.4 查看监控图形2.3 监控报警1.第三方报警…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...