0 1 2 3 4
A[2,3,1,1,4]
from A[0], can jump to every pos between 0
and 0 + A[0]
from A[1], can jump to every pos between 1
and 1 + A[1]
so..
from A[i], can jump to every pos between i
and i + A[i]
C[i] is a paper that help us to remember if we can jump to pos i
0 1 2 3 4
A[2,3,1,1,4]
C[0,0,0,0,0]
for A[0] C[0 .. 0 + A[0]] = 1
for A[1] C[1 .. 1 + A[1]] = 1
for A[i] C[i .. i + A[i]] = 1
thus, code should be like below
C[0] = 1
foreach i in A
if C[i] == 1 then
C[i .. i + A[i]] = 1
return C[last i of A]
when we set
C[i .. i + A[i]] = 1
is equals
foreach i in A
C[0 .. max of i + A[i]] = 1
is equals
maxjump = 0
foreach i in A
maxjump = max(maxjump, i + A[i])
so C[i]
can be replaced by i < maxjump
Removing C would save memory and the time used for setting them to 1