Fancy Sequence LeetCode solution in Java

1
class Fancy {
2
private ArrayList<Long> lst;
3
private ArrayList<Long> add;
4
private ArrayList<Long> mult;
5
private final long MOD = 1000000007;
6

7
public Fancy() {
8
lst = new ArrayList<>();
9
add = new ArrayList<>();
10
mult = new ArrayList<>();
11
add.add(0L);
12
mult.add(1L);
13
}
14

15
public void append(int val) {
16
lst.add((long) val);
17
int l = add.size();
18
add.add(add.get(l - 1));
19
mult.add(mult.get(l - 1));
20
}
21

22
public void addAll(int inc) {
23
int l = add.size();
24
add.set(l - 1, add.get(l - 1) + inc);
25
}
26

27
public void multAll(int m) {
28
int l = add.size();
29
add.set(l - 1, (add.get(l - 1) * m) % MOD);
30
mult.set(l - 1, (mult.get(l - 1) * m) % MOD);
31
}
32

33
public int getIndex(int idx) {
34
if (idx >= lst.size()) return -1;
35

36
int l = add.size();
37
long m = (mult.get(l - 1) * inverse(mult.get(idx))) % MOD;
38
long a = (add.get(l - 1) - (add.get(idx) * m) % MOD + MOD) % MOD;
39
return (int) (((lst.get(idx) * m) % MOD + a) % MOD);
40
}
41

42
long inverse(long a) {
43
return pow(a, MOD - 2);
44
}
45

46
long pow(long a, long n) {
47
if (n == 0) return 1;
48
if (n % 2 == 0) {
49
long t = pow(a, n / 2);
50
return (t * t) % MOD;
51
} else {
52
return (pow(a, n - 1) * a) % MOD;
53
}
54
}
55
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0