LeetCode/Top150Interview/55JumpGame.py

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]))