2
* @param {number[]} arr5
var minJumps = function (arr) {6
let valuePositionsMap = getValuePositionsMap(arr);11
while (!mySet.has(arr.length - 1)) {14
for (let currP of aoArray) {15
for (let item of findAllOptions(arr, currP, mySet, valuePositionsMap)) {18
if (item == arr.length - 1) {22
if (mySet.has(arr.length - 1)) {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], []);37
result.get(arr[i]).push(i);42
function findAllOptions(arr, currP, mySet, valuePositionsMap) {44
if (currP > 0 && arr[currP - 1] != arr[currP] && !mySet.has(currP - 1)) {45
result.push(currP - 1);48
currP < arr.length - 1 &&49
arr[currP + 1] != arr[currP] &&52
result.push(currP + 1);54
if (valuePositionsMap.has(arr[currP])) {55
for (let i of valuePositionsMap.get(arr[currP])) {56
if (i != currP && !mySet.has(i)) {60
valuePositionsMap.delete(arr[currP]);