Leetcode-1997-访问完所有房间的第一天-c++

题目详见https://leetcode.cn/problems/first-day-where-you-have-been-in-all-the-rooms/

t o = n e x t v i s i t [ i ] : 第一次到 i 之后回退到的位置 to=nextvisit[i]: 第一次到i之后回退到的位置 to=nextvisit[i]:第一次到i之后回退到的位置
f [ i ] : 从奇数次到 i 到奇数次到 i + 1 所需要的天数 f[i]: 从奇数次到 i 到奇数次到i+1所需要的天数 f[i]:从奇数次到i到奇数次到i+1所需要的天数
d p [ i ] : 从 0 号房间出发到 i + 1 号房间所需要的天数 dp[i]: 从0号房间出发到i+1号房间所需要的天数 dp[i]:从0号房间出发到i+1号房间所需要的天数

首次到第i+1个房间 d p [ i ] dp[i] dp[i]分4步:

  1. (奇数次到 i i i)从起点走到 i i i; T = d p [ i − 1 ] T=dp[i-1] T=dp[i−1]
  2. 从 i i i跳到 n e x t V i s i t [ i ] nextVisit[i] nextVisit[i]; T = 1 T=1 T=1
  3. 从 n e x t V i s i t [ i − 1 ] nextVisit[i-1] nextVisit[i−1]再走到 i i i; T = d p [ i − 1 ] − d p [ n e x t v i s i t [ i − 1 ] ] T=dp[i-1]-dp[nextvisit[i-1]] T=dp[i−1]−dp[nextvisit[i−1]]
  4. (偶数次到 i i i)从 i i i走到 i + 1 i+1 i+1; T = 1 T=1 T=1

综上
d p [ i ] = d p [ i − 1 ] + 1 + d p [ i − 1 ] − d p [ n e x t v i s i t [ i − 1 ] ] + 1 dp[i]=dp[i-1] + 1 + dp[i-1]-dp[nextvisit[i-1]] + 1 dp[i]=dp[i−1]+1+dp[i−1]−dp[nextvisit[i−1]]+1

对你没看错是题解错了

注释代码

cpp 复制代码
class Solution {
public:
    int firstDayBeenInAllRooms(vector<int>& nextVisit) {
        int mod = 1e9 + 7;
        int len = nextVisit.size();
        vector<int> dp(len);

        dp[0] = 2; //初始化原地待一天 + 访问下一个房间一天(第二步的时间)
        for (int i = 1; i < len; i++) {
            int to = nextVisit[i];
            dp[i] = 2 + dp[i - 1];	//1,2,4步
            
            if (to != 0) {
            	// 这里是第三步的第一部分,我做的时候主要这里这个dp[to - 1]比较难理解
            	// dp[to] 代表的是从0到to+1,所以想到to的话就是dp[to - 1]
                dp[i] = (dp[i] - dp[to - 1] + mod) % mod; //避免负数
            }
            dp[i] = (dp[i] + dp[i - 1]) % mod; // 这里是第三步的第二部分
        }
        return dp[len - 2]; //输出dp[n-2], 也就是到n-1的距离,而此时恰好下标从0开始。
    }
};

笔者也在新手学习期中,所写的内容主要与大家交流学习使用,如有发现任何问题敬请指正!

相关推荐
J先生x25 分钟前
【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术
图像处理·人工智能·学习·算法·计算机视觉
爱coding的橙子3 小时前
每日算法刷题 Day3 5.11:leetcode数组2道题,用时1h(有点慢)
算法·leetcode
虾球xz4 小时前
游戏引擎学习第268天:合并调试链表与分组
c++·学习·链表·游戏引擎
fpcc5 小时前
跟我学c++高级篇——模板元编程之十三处理逻辑
c++
格林威6 小时前
Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”
开发语言·c++·人工智能·数码相机·计算机视觉
Dream it possible!6 小时前
LeetCode 热题 100_只出现一次的数字(96_136_简单_C++)(哈希表;哈希集合;排序+遍历;位运算)
c++·leetcode·位运算·哈希表·哈希集合
?abc!8 小时前
缓存(5):常见 缓存数据淘汰算法/缓存清空策略
java·算法·缓存
BioRunYiXue8 小时前
一文了解氨基酸的分类、代谢和应用
人工智能·深度学习·算法·机器学习·分类·数据挖掘·代谢组学
Dddle18 小时前
C++:this指针
java·c语言·开发语言·c++
不見星空8 小时前
2025年第十六届蓝桥杯软件赛省赛C/C++大学A组个人解题
c语言·c++·蓝桥杯