-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path0552-student-attendance-record-ii.js
More file actions
69 lines (62 loc) · 2.02 KB
/
0552-student-attendance-record-ii.js
File metadata and controls
69 lines (62 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
* Student Attendance Record II
* Time Complexity: O(n)
* Space Complexity: O(1)
*/
var checkRecord = function (n) {
const MOD = 1e9 + 7;
let previousNoAbsenceNoLate = 1;
let previousNoAbsenceOneLate = 0;
let previousNoAbsenceTwoLate = 0;
let previousOneAbsenceNoLate = 0;
let previousOneAbsenceOneLate = 0;
let previousOneAbsenceTwoLate = 0;
for (
let currentLengthTracker = 0;
currentLengthTracker < n;
currentLengthTracker++
) {
let currentNoAbsenceNoLate;
let currentNoAbsenceOneLate;
let currentNoAbsenceTwoLate;
let currentOneAbsenceNoLate;
let currentOneAbsenceOneLate;
let currentOneAbsenceTwoLate;
currentNoAbsenceNoLate =
(previousNoAbsenceNoLate +
previousNoAbsenceOneLate +
previousNoAbsenceTwoLate) %
MOD;
currentNoAbsenceOneLate = previousNoAbsenceNoLate;
currentNoAbsenceTwoLate = previousNoAbsenceOneLate;
const sumFromOneAbsenceAddingPresent =
(previousOneAbsenceNoLate +
previousOneAbsenceOneLate +
previousOneAbsenceTwoLate) %
MOD;
const sumFromZeroAbsenceAddingAbsent =
(previousNoAbsenceNoLate +
previousNoAbsenceOneLate +
previousNoAbsenceTwoLate) %
MOD;
currentOneAbsenceNoLate =
(sumFromOneAbsenceAddingPresent + sumFromZeroAbsenceAddingAbsent) % MOD;
currentOneAbsenceOneLate = previousOneAbsenceNoLate;
currentOneAbsenceTwoLate = previousOneAbsenceOneLate;
previousNoAbsenceNoLate = currentNoAbsenceNoLate;
previousNoAbsenceOneLate = currentNoAbsenceOneLate;
previousNoAbsenceTwoLate = currentNoAbsenceTwoLate;
previousOneAbsenceNoLate = currentOneAbsenceNoLate;
previousOneAbsenceOneLate = currentOneAbsenceOneLate;
previousOneAbsenceTwoLate = currentOneAbsenceTwoLate;
}
const finalCount =
(previousNoAbsenceNoLate +
previousNoAbsenceOneLate +
previousNoAbsenceTwoLate +
previousOneAbsenceNoLate +
previousOneAbsenceOneLate +
previousOneAbsenceTwoLate) %
MOD;
return finalCount;
};