Jump Game IV LeetCode solution in JavaScript

1
/**
2
* @param {number[]} arr
3
* @return {number}
4
*/
5
var minJumps = function (arr) {
6
let valuePositionsMap = getValuePositionsMap(arr);
7
let mySet = new Set();
8
mySet.add(0);
9
let aoArray = [0];
10
let counter = 0;
11
while (!mySet.has(arr.length - 1)) {
12
counter++;
13
let newArray = [];
14
for (let currP of aoArray) {
15
for (let item of findAllOptions(arr, currP, mySet, valuePositionsMap)) {
16
newArray.push(item);
17
mySet.add(item);
18
if (item == arr.length - 1) {
19
break;
20
}
21
}
22
if (mySet.has(arr.length - 1)) {
23
break;
24
}
25
}
26
aoArray = newArray;
27
}
28
return counter;
29
};
30

31
function getValuePositionsMap(arr) {
32
let result = new Map();
33
for (let i = arr.length - 1; i >= 0; i--) {
34
if (!result.has(arr[i])) {
35
result.set(arr[i], []);
36
}
37
result.get(arr[i]).push(i);
38
}
39
return result;
40
}
41

42
function findAllOptions(arr, currP, mySet, valuePositionsMap) {
43
let result = [];
44
if (currP > 0 && arr[currP - 1] != arr[currP] && !mySet.has(currP - 1)) {
45
result.push(currP - 1);
46
}
47
if (
48
currP < arr.length - 1 &&
49
arr[currP + 1] != arr[currP] &&
50
!mySet.has(currP + 1)
51
) {
52
result.push(currP + 1);
53
}
54
if (valuePositionsMap.has(arr[currP])) {
55
for (let i of valuePositionsMap.get(arr[currP])) {
56
if (i != currP && !mySet.has(i)) {
57
result.push(i);
58
}
59
}
60
valuePositionsMap.delete(arr[currP]);
61
}
62
return result;
63
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0