using std::queue; using std::unordered_set; using std::vector;
classSolution { public: boolcanJump(vector<int> &nums){ int n = nums.size(); int jmp; int curr; int i, tmp; queue<int> que; unordered_set<int> uset; if (n == 1) { returntrue; }
que.push(0); uset.insert(0); do { curr = que.front(); jmp = nums[curr]; if (jmp == 0) { que.pop(); uset.erase(curr); continue; }
for (i = 1; i <= jmp; i++) { tmp = curr + i; if (tmp == n - 1) { returntrue; } elseif (tmp < n && uset.count(tmp) == 0) { que.push(tmp); uset.insert(tmp); } } uset.erase(curr); que.pop();