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];
}
}

浙公网安备 33010602011771号