Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example:
A = [2,3,1,1,4]
, return true
.
A = [3,2,1,0,4]
, return false
.
Solution:
If we could reach the end, the maximum position we could reach must be further than or right at the end. Thus we traverse through the array and get the maximum position we could reach.
For current maximum range:
traverse the current maximum range, compare current maximum range to the new range at num[i].
if the new range is larger than maximum range, update the current maximum range to this new range
end for
Code:
class Solution {
public:
bool canJump(vector<int>& nums) {
if(nums.size()==1) return true;
if(nums[0] > nums.size() - 1 ) return true;
int max_range = 0;
int i = 0;
while(i<nums.size()-1){//traverse through current range and see if we can go further than current //range
max_range = max(max_range,nums[i] + i);//if we can go forward, update the maximum range
if(max_range <= i) //we come to a point we cannot reach or we come to a point where we couldn't go forward.
return false;
i++;
}
return true;
}
};