2024.3.28力扣每日一题——访问完所有房间的第一天

2024.3.28

      • 题目来源
      • 我的题解
        • 方法一 模拟
        • 方法二 动态规划

题目来源

力扣每日一题;题序:1997

我的题解

方法一 模拟

使用一个Set存储已经访问过的房间号,直到Set中的元素个数等于房间数时停止模拟。

时间复杂度:O(day)。能够访问完所有房间的最小天数
空间复杂度:O(n)。count数组记录房间被访问次数的奇偶

public int firstDayBeenInAllRooms(int[] nextVisit) {int n=nextVisit.length;int[] count=new int[n];Set<Integer> set=new HashSet<>();int i=0;long day=0;int mod=1000000007;set.add(0);while(set.size()<n){if(count[i]==0){count[i]=1;i=nextVisit[i];}else{count[i]=0;i=(i+1)%n;}day=(day+1)%mod;set.add(i);}return (int)(day%mod);
}
方法二 动态规划

当访问次数是奇数时下次访问会回访,只有访问次数是偶数才会遍历下一个房间。所以,在访问房间i时,左边的房间一定都已经访问了偶数次(不然不可能到达i)。也就是从 i回到 j 时,此时 [j,i−1] 范围内的房间都处于访问偶数次的状态。那么当我们访问这个范围内的每个房间时,算上本次访问,访问次数一定是奇数,所以要想重新回到 iii,对于 [j,i−1] 范围内的每个房间,都需要执行一次「回访」。
定义 f[i] 表示从「访问到房间 i 且次数为奇数」到「访问到房间 i且次数为偶数」所需要的天数。定义包含了首次访问房间 i的一天,和重新回到房间 i 的一天
由于 [j,i−1]范围内的每个房间都需要「回访」,所以需要把这个范围内的 fff 值都加起来,再算上房间 i 需要访问 2次。所以,状态转移方程:
f [ i ] = 2 + ∑ k = j i − 1 f [ k ] f[i]=2+\sum_{k=j}^{i-1}f[k] f[i]=2+k=ji1f[k]
和式采用前缀和优化,最终的状态转移方程:
d p [ i + 1 ] = d p [ i ] ∗ 2 − d p [ j ] + 2 dp[i+1]=dp[i]*2-dp[j]+2 dp[i+1]=dp[i]2dp[j]+2
dp[i]表示 ∑ j = 0 i f [ i ] \sum_{j=0}^{i}f[i] j=0if[i]

时间复杂度:O(n)
空间复杂度:O(n) 。

public int firstDayBeenInAllRooms(int[] nextVisit) {int n = nextVisit.length;int mod=1_000_000_007;long[] dp = new long[n];for (int i = 0; i < n-1; i++) {int j=nextVisit[i];dp[i+1]=(dp[i]*2-dp[j]+2+mod)%mod;//需要避免算出负数}return (int)dp[n-1];
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

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

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

相关文章

信息管理管理工程习题【1~4章】

1、将十进制68转换成二进制为&#xff08; &#xff09;&#xff0c;转换成八进制为&#xff08; &#xff09;&#xff0c;转换成十六进制为&#xff08; &#xff09;。 A. 1000100 102 40 B. 1000100 104 44 C. 1000101 102 40 D. 1000110 104 44 【答案】&#xff1a;B 2、…

如何恢复被.locked勒索病毒加密的服务器和数据库?

.locked勒索病毒有什么特点&#xff1f; .locked勒索病毒的特点主要包括以下几个方面&#xff1a; 文件加密&#xff1a;.locked勒索病毒会对受感染设备上的所有文件进行加密&#xff0c;包括图片、文档、视频和其他各种类型的重要文件。一旦文件被加密&#xff0c;文件的扩展…

淘宝商品描述API接口:轻松获取商品信息的新途径

淘宝商品描述API接口是淘宝开放平台提供的一种高效、便捷的新途径&#xff0c;旨在帮助开发者轻松获取淘宝商品的详细描述信息。通过这一接口&#xff0c;商家、开发者和用户都能获得商品标题、描述、属性、价格、图片等关键信息&#xff0c;从而满足各种业务需求。 在使用淘宝…

【Trick】AIGC翻译润色

1&#xff1a;可尝试在chat bar中提前输入以下内容&#xff1a; I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and imp…

指针的深入理解(六)

指针的深入理解&#xff08;六&#xff09; 个人主页&#xff1a;大白的编程日记 感谢遇见&#xff0c;我们一起学习进步&#xff01; 文章目录 指针的深入理解&#xff08;六&#xff09;前言一. sizeof和strlen1.1sizeof1.2strlen1.3sizeof和strlen对比 二.数组名和指针加减…

前端html+css+js常用总结快速入门

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 学习前端全套所有技术性价比低下且容易忘记&#xff0c;先入门学会所有基础的语法&#xff08;cssjsheml&#xff09;&#xff…

深度挖掘商品信息,jd.item_get API助您呈现商品全面规格参数

深度挖掘商品信息&#xff0c;特别是在电商平台上&#xff0c;对于商家、开发者和用户来说都至关重要。jd.item_get API作为京东开放平台提供的一个强大工具&#xff0c;能够帮助用户轻松获取商品的全面规格参数&#xff0c;进而为商品分析、推荐、比较等提供有力的数据支撑。 …

using和typename在C++中的用法

using关键字有两个主要用途&#xff1a; 1.类型别名&#xff1a;使用using可以为类型创建新的名称&#xff0c;这在模板编程中尤其有用。 using integer int; integer a 5; // 这里的integer就是int类型2.命名空间&#xff1a;using可以用来引入命名空间中的名字&#xff0c…

Liquid的Covenants:处理比特币脚本中的金额

1. 引言 Covenants契约是一种允许introspection自省的结构&#xff1a; 交易output可以对花费其的交易施加条件&#xff08;超出特定的“必须提供自身的有效签名和特定的公钥”&#xff09;。 Rusty Russell 之前研究过Covenants: Examining ScriptPubkeys in Bitcoin Scrip…

两相欠压继电器 WY-35A3 额定输入电压100V 导轨安装 JOSEF约瑟

系列型号&#xff1a; WY-35A4电压继电器&#xff1b;WY-35B4电压继电器&#xff1b; WY-35C4电压继电器&#xff1b;WY-35D4电压继电器&#xff1b; WY-35A4D电压继电器&#xff1b;WY-35A4T电压继电器&#xff1b; WY-35B4D电压继电器&#xff1b;WY-35B4T电压继电器&#xf…

人工智能时代过失犯理论的挑战与应对—以自动驾驶汽车交通肇事为例

内容提要以自动驾驶汽车为代表的人工智能产品致害所涉犯罪主体复杂多样、前置性规范缺失, 以及人工智能产品固有的自主与黑箱特性等问题给过失犯理论带来了变革的压力与挑战。传统过失犯理论、新过失犯理论以及客观归责理论都无法解决人工智能产品致害所涉过失犯罪认定问题。人…

【VMware】虚拟机及镜像Ubuntu安装

Vmware 一.VM是什么&#xff1f;有什么用&#xff1f;二.下载VMware Wworkstation Pro三.安装虚拟机四.安装镜像 一.VM是什么&#xff1f;有什么用&#xff1f; vmware是一款运行在windows系统上的虚拟机软件&#xff0c;可以虚拟出一台计算机硬件&#xff0c;方便安装各类操作…

K8s学习七(服务发现_2)

Ingress Service 主要用于集群内部的通信和负载均衡&#xff0c;而 Ingress 则是用于将服务暴露到集群外部&#xff0c;并提供灵活的 HTTP 路由规则。在实际应用中&#xff0c;它们通常结合使用&#xff0c;Service 提供内部通信和负载均衡&#xff0c;Ingress 提供外部访问和…

网络工程师笔记18(关于网络的一些基本知识)

网络的分类 介绍计算机网络的基本概念&#xff0c;这一章最主要的内容是计算机网络的体系结构-ISO 开放系统互连参考模型&#xff0c;其中的基本概念&#xff0c;例如协议实体、协议数据单元&#xff0c;服务数据单元、面向连接的服务和无连接的服务、服务原语、服务访问点、相…

蓝桥杯练习题 —— 高精度加法(python)

python优势 # encoding utf-8 # 开发者&#xff1a;xxx # 开发时间&#xff1a; 16:48 # "Stay hungry&#xff0c;stay foolish."a int(input()) b int(input())print(a b) 正常 # encoding utf-8 # 开发者&#xff1a;xxx # 开发时间&#xff1a; 16:48 #…

大数据分层存储架构:ODS、DWD、DWM与DWS详解

在大数据领域中&#xff0c;ODS、DWD、DWM和DWS代表了数据仓库的不同层次&#xff0c;它们共同构成了大数据的分层存储结构。这种结构的设计有助于提高数据查询效率&#xff0c;降低成本&#xff0c;并满足不同的业务需求。 ODS&#xff08;Operational Data Store&#xff09…

计算机视觉领域主流优秀的模型的用处与区别,优劣。复合缩放方法,深度可分离卷积

目录 计算机视觉领域主流优秀的模型的区别,优劣 YOLO (You Only Look Once) ResNet、EfficientNet 优劣与应用场景

1.k8s简介

目录 k8s是什么 k8s不是什么 云原生 微服务 整体式架构与微服务架构 微服务的特性 微服务的优势 k8s是什么 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快…

除了sql外还有那些查询语言

除了SQL&#xff08;结构化查询语言&#xff09;外&#xff0c;还有许多其他的查询语言&#xff0c;包括但不限于XQuery&#xff08;对XML的查询语言&#xff09;、MDX&#xff08;多维查询语言&#xff0c;用于分析数据仓库&#xff09;、DQL&#xff08;数据查询语言&#xf…

聊一聊,JMeter分布式性能测试!

在做后端服务器性能测试中&#xff0c;我们会经常听到’分布式’。但你是否了解分布式呢&#xff1f;今天&#xff0c;我们就来给大家讲讲&#xff0c;在企业实战中&#xff0c;如何使用分布式进行性能测试&#xff0c;实战过程中&#xff0c;又有哪些地方要特别注意&#xff1…