LeetCode:1997. 访问完所有房间的第一天(DP Java)

目录

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

题目描述:

实现代码与解析:

DP

原理思路:


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 天是你访问完所有房间的第一天。

提示:

  • n == nextVisit.length
  • 2 <= n <= 105
  • 0 <= nextVisit[i] <= i

实现代码与解析:

DP

class Solution {public int firstDayBeenInAllRooms(int[] nextVisit) {int mod = 1000000007;int n = nextVisit.length;long[] f = new long[n];f[0] = 0; // 第一次到达idx0是0,当开始读数据回退的时候才算第一天,所以这里是第0天for (int i = 1; i < n; i++) {int t = nextVisit[i - 1];f[i] = (f[i - 1] + 1 + f[i - 1] - f[t] + 1 + mod) % mod;}return (int)f[n - 1];}
}

原理思路:

        这题,我只能说看着短,但是这题真难想其实,尤其是哪个官解,写的更是让看不懂的更晕了。

        这里的dp[i]数组含义,第一次到第i间房间的天数。 

        所以答案是确定dp[n - 1]。

最主要的是递推式怎么写?

        房间只有偶数次访问才能向前走,所以,当到了第 i 间房间,说明前面的房间一定全部已经访问了偶数次,不然到不了这个房间。(为了书写方便,我用 v 代表nextVisit数组)

        第一次到达i - 1的房间时,一定会消耗一天回溯到  v[ i - 1] 的房间, 令v[i - 1] 为 t(方便书写),因为 i - 1之前的房间一定被访问了偶数次,所以v回溯到 t 房间一定是对其的奇数次访问,在这一时刻,t之前的房间一定也是偶数次访问,t 到 i - 1之间的房间也是偶数次访问,所以我们可以看作为第一次到达 t 房间的状态,我愿称之为重置(但以不是最初的时间,只是状态一致),所以直接用 f[ t ] 表示第一次到达t房间的天数进行后面的计算。

        这时想要第二次到达i - 1这个房间,就需要重新走一遍已经走过的路,用f[ i - 1] - f[ t ] ,即可表示走这段路花费的时间。这时第二次(偶次)到达了i - 1这个房间,再消耗一天,便到了 i 房间。

        这就是递推式f[ i ] 的由来。  f[ i ] = f[i - 1] + 1 + f[i - 1] - f[t] + 1;//注意我两个+1对应粗体字

        我愿称之为,虽然我每接近你一步,轮回的次数就会变多,但是我任然想不断的靠近你,即使每次回溯我都要再花费更长的时间重复经历一遍又一遍。

小细节:

        开long。

        取mod后f[ i - 1] 可能 小于 f [ t ] 所以先 + mod 再 % mod,防止负数出现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hadoop3.0 非高可用安装

伪分布式集群&#xff0c;不依赖zookeeper的hadoop集群 只有namenode, 和datanode, 可以有两个namenode. 没有zookeeper, 没有zkfc, 没有journalnode. 只在学习的时候使用, 生存环境不适用 . 生产环境用的高可用集群见 https://blog.csdn.net/weijiqian/article/details/13715…

什么是AIGC,AIGC的应用领域有哪些,以及对AIGC的未来展望有什么值得关注的方向

AIGC:人工智能生成内容的深度解析 在数字技术的浪潮中,AIGC(ArtificialIntelligenceGeneratedContent,人工智能生成内容)逐渐崭露头角,成为继专业生产内容(PGC)和用户生产内容(UGC)之后的新型内容创作方式。它不仅改变了内容生产的传统模式,更在多个行业中展现出…

QA测试开发工程师面试题满分问答6: 如何判断接口功能正常?从QA的角度设计测试用例

判断接口功能是否正常的方法之一是设计并执行相关的测试用例。下面是从测试QA的角度设计接口测试用例的一些建议&#xff0c;包括功能、边界、异常、链路、上下游和并发等方面&#xff1a; 通过综合考虑这些测试维度&#xff0c;并设计相应的测试用例&#xff0c;可以更全面地评…

蓝桥杯第十五届抱佛脚(七)前缀和与差分

蓝桥杯第十五届抱佛脚&#xff08;七&#xff09;前缀和与差分 前缀和 前缀和算法是一种在数组处理中非常有效的技术&#xff0c;特别是当需要频繁查询某个固定区间内的元素和时。这种算法可以在 O(N) 的时间内预处理数组&#xff0c;并且能在 O(1) 的时间内回答区间和的查询…

CCF-B推荐会议 ICSME’24 4月11日截稿 速来参与

会议之眼 快讯 第40届ICSME 2024 (IEEE International Conference on Software Maintenance and Evolution)即IEEE软件维护与发展国际会议将于 2024 年 10月6日-11日在美国弗拉格斯塔夫阿兹举行&#xff01;ICSME是学术界、工业界和政府研究人员和从业者的首要国际论坛&#x…

阿里AI编码助手“通义灵码”安装及使用

1.介绍 “通义灵码”是一款基于阿里云通义代码大模型打造的智能编码助手&#xff0c;产品于2023年10月31日云栖大会上&#xff0c;正式对外发布。 核心使用场景&#xff1a;代码智能生成和研发智能问答。 主要功能点&#xff1a; &#xff08;1&#xff09;行级/函数级实时…

BPMN的发展及简介

背景 BPM“通过建模、自动化、管理和优化流程&#xff0c;打破跨部门跨系统业务过程依赖、打破信息孤岛&#xff0c;提高业务效率和效果”&#xff0c;通俗一点讲&#xff0c;就是工作流引擎。在进行流程设计时&#xff0c;需要将流程的元素进行定义&#xff0c;并按照一定的格…

PSDK 102S V3:航测领域的革新者

在航测领域&#xff0c;精确、高效的数据获取一直是行业追求的目标。PSDK 102S V3&#xff0c;作为SHAR三赛尔推出的一款高性能倾斜摄影相机&#xff0c;凭借其先进的技术和卓越的性能&#xff0c;正在成为航测领域的革新者。 自研三轴智能稳定云台&#xff1a;PSDK 102S V3配备…

Canal1.1.5整Springboot在MQ模式和TCP模式监听mysql

canal本实验使用的是1.1.5&#xff0c;自行决定版本&#xff1a;[https://github.com/alibaba/canal/releases] canal 涉及的几个角色 canal-admin&#xff1a;canal 后台管理系统&#xff0c;管理 canal 服务canal-deployer&#xff1a;即canal-server&#xff08;客户端&…

安装客户端pymilvus

pymilvus简介 PyMilvus 是 Milvus 的 Python SDK。 安装pymilvus 参考文档: https://milvus.io/api-reference/pymilvus/v2.3.x/About.md安装pymilvus需要先安装python环境&#xff0c;这里使用conda。 pip install pymilvusv2.3.7查看安装了哪些包: conda list -n py311…

专升本-大数据

大数据定义&#xff1a; 大数据指无法在可承受的时间范围内用常规软件工具进行捕捉&#xff0c;管理和处理的数据集合。是需要新处理模式才能具有更强的决策力&#xff0c;洞察发现力和流程优化能力的海量&#xff0c;高增长率和多样化的信息资产 大数据数据源的分类(3种)&am…

市场瞭望杂志市场瞭望杂志社市场瞭望编辑部2024年第2期目录

福山福水 拼经济&#xff0c;2024福建这样布局 林先昌 ;谢何平 ;余燕芳 ;陈强 ;王茜 ;刘星; 3-5 财经搜要 人民银行宣布“降准定向降息” 6《市场瞭望》投稿&#xff1a;cnqikantg126.com 两部门印发《意见》促进制造业中试创新发展 6 首部《中国企业信用年鉴》…

AI提速 OpenAI 新模型GPT-5今年上线?

这两天&#xff0c;有关OpenAI新模型 GPT-5的消息又多了起来。有知情人士称&#xff0c;OpenAI将在今年年中的某个时候发布GPT-5&#xff0c;很可能是在今年夏天期间。OpenAI CEO 萨姆奥特曼在一次播客采访中透露“GPT-5的智能水平得到提升”。 有趣的是&#xff0c;播客的主理…

js绑定点击事件的方法

点击按钮的三种方式 方式一&#xff1a;给对象的属性赋值 注意点&#xff1a;由于是将函数&#xff08;function&#xff09;赋值给了一个对象&#xff08;oBtn&#xff09;的属性&#xff08;onclick&#xff09;&#xff0c;所以后赋值的会覆盖先赋值的。 oBtn.onclick fu…

阿里云免费证书过期更换证书操作步骤:

阿里云证书过期更换证书操作步骤&#xff1a; 登录阿里云控制台&#xff0c;搜索ssl证书&#xff0c;选择免费证书 点击创建证书&#xff0c;输入域名点确定&#xff0c;然后点击证书申请 选择文件验证方式&#xff0c;提交申请 下载验证文件fileauth.text到&#xff0c;解压后…

OpenHarmony实战:命令行工具hdc安装应用指南

一、工具概述 hdc&#xff08;OpenHarmony Device Connector&#xff09;是为开发人员提供的用于设备连接调试的命令行工具&#xff0c;该工具需支持部署在 Windows/Linux/Mac 等系统上与 OpenHarmony 设备&#xff08;或模拟器&#xff09;进行连接调试通信。 简言之&#xf…

XenCenter 2024 导出虚拟机

选择导出 选择需要导出的虚拟机 导出位置&#xff0c;导出格式&#xff0c;名称 EULA 文档&#xff0c;根据自己需求配置 OVA是否需要加密验证&#xff0c;自己需要看&#xff0c;是否单独的OVA 确认导出配置&#xff0c;等待导出完成。 本地目录查看导出完成

05 过滤器

文章目录 Filter01.javaFilter02.javaFilter03.javaFilter04.java Filter01.java package com.aistart.filter;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRes…

【REP】hrms-ERPNext 容器安装配置

需要安装frappe ——>ERPNext ——>hrms https://github.com/frappe/hrms 安装 dokcer compose cd /usr/local/bin/ wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 mv docker-compose-linux-x86_64 docker-compose …

Isaac sim的一些例程

一、standalone_examples 里面有AMR自主导航的例子&#xff0c;jetbot强化学习的例子等等&#xff1b; 二、 Simulated -> Demo Scenes &#xff08;physics demo scenes&#xff09; 这个里面有很多物理场景演示&#xff0c;如各种形态车辆&#xff0c;关节机器人&#xf…