Delete and Earn LeetCode solution in JavaScript

1
var deleteAndEarn = function (nums) {
2
let maxNumber = 0;
3

4
const cache = {};
5
const points = {};
6

7
function maxPoints(num) {
8
if (num === 0) {
9
return 0;
10
}
11

12
if (num === 1) {
13
return points[1] || 0;
14
}
15

16
if (cache[num] !== undefined) {
17
return cache[num];
18
}
19

20
const gain = points[num] || 0;
21
return (cache[num] = Math.max(
22
maxPoints(num - 1),
23
maxPoints(num - 2) + gain
24
));
25
}
26

27
for (let num of nums) {
28
points[num] = (points[num] || 0) + num;
29
maxNumber = Math.max(maxNumber, num);
30
}
31

32
return maxPoints(maxNumber);
33
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0