Array Hopper I
Last updated
class Solution(object):
def canJump(self, array):
"""
input: int[] array
return: boolean
"""
# write your solution here
#
#idea: dp
#dp[i] state = the maximum distance, starting from index =0, can reach in array[0:i+1]
# base case: dp[0] = array[0]
#dp[1] = max(max distance starting from 1, dp[0]) if index =1 can be reach, that is, if dp[i-1]>=i, else dp[1] = dp[0], dp[i]= dp[i-1]
#so
#
#
if not array:
return False
if len(array) ==1:
return True
dp = [0] *len(array)
dp[0] = array[0]
for i in range(1, len(array)):
if dp[i-1] >= i:
#find max distance starting from current idx
j = i
while j < len(array):
if array[j] == 0:
break
j += array[j]
# compare previous max distance and max distance starting from current idx
dp[i] = max(dp[i-1], j)
else:
dp[i] = dp[i-1]
return dp[len(array)-1] >= len(array)-1