leetcood学习笔记-45-跳跃游戏二
题目描述:
第一次提交;超时
class Solution: def jump(self, nums: List[int]) -> int: l = [] for i in range(len(nums)): l.append(i) for i, v in enumerate(nums): for j in range(1,v+1): if i + j < len(l) and l[i + j] > l[i] + 1: l[i + j] = l[i] + 1 return l[-1]
方法一:贪心 O(n)
class Solution: def jump(self, nums: List[int]) -> int: step =0;n=len(nums);last=0;cur=0 for i in range(n-1): cur=max(cur,i+nums[i]) if i==last: last=cur step+=1 if cur>=n-1: break return step
class Solution: def jump(self, nums: List[int]) -> int: l = len(nums)-1 if l==0: return 0 elif l==1: return 1 steps = 0 m = max(nums) while l!=0: temp = l for i in range(max(0,l-1-m),l): if i+nums[i]>=l and i<temp: temp = i l = temp steps += 1 return steps