Skip to content

Commit a97188d

Browse files
committed
3351. Sum of Good Subsequences
1 parent 3565cb0 commit a97188d

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Solution by Sergey Leschev
2+
// 3351. Sum of Good Subsequences
3+
// DP
4+
5+
function sumOfGoodSubsequences(nums: number[]): number {
6+
const MOD = 1000000007
7+
8+
const count: Map<number, number> = new Map()
9+
const sum: Map<number, number> = new Map()
10+
11+
for (const num of nums) {
12+
const cntPrev = count.get(num - 1) || 0
13+
const cntCurr = count.get(num) || 0
14+
const cntNext = count.get(num + 1) || 0
15+
16+
const sumPrev = sum.get(num - 1) || 0
17+
const sumCurr = sum.get(num) || 0
18+
const sumNext = sum.get(num + 1) || 0
19+
20+
count.set(num, (cntPrev + cntNext + cntCurr + 1) % MOD)
21+
22+
const newSum = (sumPrev + sumNext + sumCurr + num * (cntPrev + cntNext + 1)) % MOD
23+
sum.set(num, newSum)
24+
}
25+
26+
let result = 0
27+
for (const value of sum.values()) {
28+
result = (result + value) % MOD
29+
}
30+
31+
return result
32+
}

0 commit comments

Comments
 (0)