3
int minJumps(vector<int> &arr) {5
unordered_map<int, vector<int>> mp;6
for (int i = 0; i < n; i++) mp[arr[i]].push_back(i);9
vector<bool> visited(n, false);15
int currIdx = q.front();17
if (currIdx == n - 1) return steps;18
//================================================================19
// EXPLORE ALL POSSIBLE OPTIONS20
if (currIdx + 1 < n && !visited[currIdx + 1]) // OPTION-1 (Move Forward)22
visited[currIdx + 1] = true;25
if (currIdx - 1 >= 0 && !visited[currIdx - 1]) // OPTION-2 (Move Backward)27
visited[currIdx - 1] = true;30
for (int newIdx : mp[arr[currIdx]]) // OPTION-3 (Move to same valued idx)31
{ // newIdx coud be before currIdx or after currIdx32
if (!visited[newIdx]) {33
visited[newIdx] = true;37
//===================================================================38
mp[arr[currIdx]].clear(); // EXPLAINED BELOW :)