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=nextvisiti: 第一次到i之后回退到的位置 to=nextvisiti:第一次到i之后回退到的位置
f i : 从奇数次到 i 到奇数次到 i + 1 所需要的天数 fi: 从奇数次到 i 到奇数次到i+1所需要的天数 fi:从奇数次到i到奇数次到i+1所需要的天数
d p i : 从 0 号房间出发到 i + 1 号房间所需要的天数 dpi: 从0号房间出发到i+1号房间所需要的天数 dpi:从0号房间出发到i+1号房间所需要的天数

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

  1. (奇数次到 i i i)从起点走到 i i i; T = d p i − 1 T=dpi-1 T=dpi−1
  2. 从 i i i跳到 n e x t V i s i t i nextVisiti nextVisiti; T = 1 T=1 T=1
  3. 从 n e x t V i s i t i − 1 nextVisiti-1 nextVisiti−1再走到 i i i; T = d p i − 1 − d p n e x t v i s i t \[ i − 1 ] T=dpi-1-dpnextvisit\[i-1] T=dpi−1−dpnextvisit\[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 dpi=dpi-1 + 1 + dpi-1-dpnextvisit\[i-1] + 1 dpi=dpi−1+1+dpi−1−dpnextvisit\[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开始。
    }
};

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

相关推荐
一次旅行1 分钟前
RLHF全链路深度解析:Reward Model数学推导+PPO完整实战,对比GRPO轻量化方案
人工智能·算法·机器学习
Wang's Blog3 分钟前
AI Agent白手起家29: Few Shot 提示词工程实战
人工智能·算法
June`43 分钟前
warp shuffle指令
c++·人工智能·算法·cuda
geovindu44 分钟前
go:Bit Operation Algorithm
开发语言·后端·算法·golang·位运算法
乱七八糟的屋子1 小时前
【C++数值计算】NumCpp超详细入门教程(纯正Numpy语法、零学习成本、C++首选科学计算库、性能压测对比)
c++·数值计算·numpy·高性能计算·科学计算·ndarray
choumin1 小时前
C程序能调用extern “C“声明的带默认参数的C++函数吗?
c语言·c++·extern c·默认参数
AmyLin_20011 小时前
PDF 色彩保真工程实践【3】上手实践:工程结构、依赖集成与一键构建运行
c++·visualstudio·pdf·zlib·vcpkg·libtiff·cmyk
并不喜欢吃鱼2 小时前
从零开始 C++------ 十六.深度拆解 C++ 智能指针:unique_ptr/shared_ptr/weak_ptr 底层模拟、内存泄漏根治
开发语言·c++
Wang's Blog2 小时前
AI Agent白手起家31: 根据语义相似度动态选择 Few Shot 示例
人工智能·算法
不相心 -w-2 小时前
Cmake的基础用法
linux·开发语言·c++