57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
def canJump(nums):
|
|
"""
|
|
:type nums: List[int]
|
|
:rtype: bool
|
|
"""
|
|
# # Each index value is the maximum you can jump from that position
|
|
# maxJump = 0
|
|
# if len(nums) == 1:
|
|
# return True
|
|
# for x in range(len(nums)-1):
|
|
# print(nums[x])
|
|
# maxJump += nums[x]
|
|
# if nums[x] >= len(nums)-(x+1):
|
|
# return True
|
|
# # print(maxJump)
|
|
# if nums[x] == 0:
|
|
# if x-1 >= 0 and nums[x-1] >=2:
|
|
# maxJump += nums[x]
|
|
# else:
|
|
# # print(x+1)
|
|
# # print(len(nums))
|
|
# # if nums[x+1] >= len(nums)-(x+2) and x+1 != len(nums)-1:
|
|
# # return True
|
|
# return False
|
|
# return False
|
|
|
|
# Double pointer method
|
|
start = 0
|
|
jump = len(nums)-2
|
|
# Case for single value array
|
|
if len(nums) == 1 or nums[start] >= len(nums)-1:
|
|
return True
|
|
while start <= jump:
|
|
print(f'start: {start}, value {nums[start]}')
|
|
print(f'jump index: {jump}, value: {nums[jump]}')
|
|
if nums[start] == 0:
|
|
return False
|
|
# check if jump is equal to end jump
|
|
if not nums[jump] >= (len(nums)-(jump+1)):
|
|
jump -= 1
|
|
if not nums[start + nums[start]] >= 0:
|
|
if start + nums[start] >= jump:
|
|
return True
|
|
start += 1
|
|
else:
|
|
start += 1
|
|
|
|
|
|
# print(canJump([2,3,1,1,4]))
|
|
# print(canJump([3,2,1,0,4]))
|
|
# print(canJump([3,0,8,2,0,0,1]))
|
|
# print(canJump([2,0,2]))
|
|
print(canJump([2,5,0,0]))
|
|
# print(canJump([0,2,3]))
|
|
# print(canJump([2,0,0]))
|
|
# print(canJump([1,1,2,2,0,1,1]))
|
|
# print(canJump([5,9,3,2,1,0,2,3,3,1,0,0])) |