贪婪算法
定义step为步数,定义cur_pos和max_pos为当前能达到的最大位置和下一步能达到的最大位置,定义i表示两次最大位置中间隔的位置
从第0步开始,计算每步能达到的最大位置,一直到达到终点位置,如果下一步的最大位置和本次最大位置一样,说明无法再前进
class Solution:
def jump(self, nums):
max_pos,cur_pos = 0,0
i,step=0,0
while max_pos<len(nums)-1:
cur_pos = max_pos
while i<=cur_pos:
max_pos = max(max_pos,i+nums[i])
i+=1
if cur_pos == max_pos:
return -1
step+=1
return step
BFS搜索
同样也是一种贪心算法
class Solution:
def jump(self, nums):
if len(nums)==1:
return 0
l,r = 0,nums[0]
step = 1
while r<len(nums)-1:
nxt = max(i+nums[i] for i in range(l,r+1))
l,r = r,nxt
step +=1
return step