1997. 访问完所有房间的第一天(中等)

核心思想
注意数据范围
0 <= nextVisit[i] <= i
也就是说 当前下标i只能去之前的地方
也就是说i+1 只能 通过 i 访问次数为偶数才能达到
定义 dp[i] 到达第i个房间的天数

那么要到达第i个房间的路径为
0 -> i-1 -> nextVisit[i-1] -> i-1 -> i
只有第二次达到i-1才能达到i

class Solution {
    public int firstDayBeenInAllRooms(int[] nextVisit) {
        final int MOD = (int) (1e9 + 7);
        int len = nextVisit.length;

        long[] dp = new long[len];
        dp[0] = 0;
        for(int i = 1; i < len; i++){
            dp[i] = (2 * dp[i - 1] - dp[nextVisit[i - 1]] + 2 + MOD) % MOD;
        }
        return (int) dp[len - 1];
    }
}
posted @ 2024-04-01 19:33  Shie1d  阅读(18)  评论(0)    收藏  举报