All nodes with in jumping range can be used as stepping stones. Take the stepping stone which can help you reach farther.
Example:
A = [2,3,1,1,4,0,1]
- At A[0], can jump at most 2, so A[1], A[2] are all possible intermediate stepping stone
- If take A[1] as stepping stone, at most can jump to A[4]; If take A[2], at most can jump to A[3]; So take A[1] as stepping point and jump to A[4] ; [Greedy]
- At A[4], can jump at most 4, so A[5], A[6] are all in jumping range. Can Reach the end;
Code:
public class Solution {
public boolean canJump(int[] A) {
int current = 0;
while(current < A.length -1){
if(A[current] == 0) return false;
int max = current+1;//best stepping stone; initialized as the one right after current node
for(int i = current+1; i <= current + A[current] && i < A.length; i++)
{
if(i + A[i] > max + A[max]){
max = i;
}
}
current = max;//take the best stepping stone
}
return true;
}
}