मान लीजिए कि हमारे पास arr नामक पूर्णांकों की एक सरणी है। हम शुरुआत में इंडेक्स 0 पर हैं। एक चरण में हम इंडेक्स i से i + x पर जा सकते हैं जहां:i + x
तो, अगर इनपुट पसंद है,

तो आउटपुट 3 होगा, हमें इंडेक्स 0 से 4 से 3 से 9 तक तीन छलांग चाहिए।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक नक्शा परिभाषित करें मी
-
n :=गिरफ्तारी का आकार
-
इनिशियलाइज़ i :=0 के लिए, जब i
-
m[arr[i]]
. के अंत में i डालें
-
-
m[arr[i]]
. के अंत में i डालें -
विज़िट किए गए में 0 डालें
-
एक कतार को परिभाषित करें q
-
lvl प्रारंभ करने के लिए :=0, जब q खाली न हो, अद्यतन करें (1 से lvl बढ़ाएँ), do−
-
sz :=q का आकार
-
जबकि sz गैर-शून्य है, प्रत्येक पुनरावृत्ति में sz को 1 से घटाएं -
-
curr :=q का पहला तत्व
-
q से तत्व हटाएं
-
अगर curr n-1 के समान है, तो
-
वापसी एलवीएल
-
-
मैं :=वक्र
-
अगर i - 1>=0 और नहीं i - 1 विज़िट किया गया है, तो -
-
q में i-1 डालें
-
विज़िट किए गए में i - 1 डालें
-
-
अगर i + 1
-
q में i + 1 डालें
-
विज़िट किए गए में i + 1 डालें
-
-
इनिशियलाइज़ j :=0 के लिए, जब j
-
अगर (m[arr[curr], j]) का दौरा नहीं किया गया है, तो -
-
q में m[arr[curr], j] डालें
-
देखे गए में m[arr[curr], j] डालें
-
-
-
अगर arr[curr] m में नहीं है, तो -
-
m
. से arr[curr] हटाएं
-
-
-
-
वापसी -1
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int minJumps(vector<int>& arr) {
map<int, vector<int> > m;
int n = arr.size();
for (int i = 0; i < n; i++) {
m[arr[i]].push_back(i);
}
set<int> visited;
visited.insert(0);
queue<int> q;
q.push(0);
for (int lvl = 0; !q.empty(); lvl++) {
int sz = q.size();
while (sz--) {
int curr = q.front();
q.pop();
if (curr == n - 1)
return lvl;
int i = curr;
if (i - 1 >= 0 && !visited.count(i - 1)) {
q.push(i - 1);
visited.insert(i - 1);
}
if (i + 1 < n && !visited.count(i + 1)) {
q.push(i + 1);
visited.insert(i + 1);
}
for (int j = 0; j < m[arr[curr]].size(); j++) {
if (!visited.count(m[arr[curr]][j])) {
q.push(m[arr[curr]][j]);
visited.insert(m[arr[curr]][j]);
}
}
if (m.count(arr[curr])) {
m.erase(arr[curr]);
}
}
}
return -1;
}
};
main(){
Solution ob;
vector<int> v = {20,-5,-5,25,20,5,5,5,1,25};
cout << (ob.minJumps(v));
} इनपुट
{20,-5,-5,25,20,5,5,5,1,25} आउटपुट
3