Skip to main content

jumpGame

Greedy

class Solution:
def canJump(self, nums: List[int]) -> bool:
n = len(nums)
if n <= 1:
return(True)

furthestReachable = 0
for idx in range(n):
if idx > furthestReachable:
return(False)

furthestReachable = max(furthestReachable, idx + nums[idx])

return(furthestReachable >= n - 1)

Using DP

class Solution:
def canJump(self, nums: List[int]) -> bool:
n = len(nums)
if n <= 1:
return(True)

dp = [False] * n
dp[n - 1] = True

# O(n) time and space
mostLeftTrue = n - 1
for idx in range(n - 1, -1, -1):
if nums[idx] + idx >= mostLeftTrue:
dp[idx] = True
mostLeftTrue = idx

return(dp[0])