刷力扣学习贪心算法[leetcode45. 跳跃游戏 II]
原题链接
https://leetcode-cn.com/problems/jump-game-ii/
和贪心算法有关的算法有背包问题,区间调度问题,哈夫曼编码问题等
贪心算法本质上是对分治的一种优化,这要求你计算的每一步在所有情况下都是最优解,因此可以无需考虑当前步骤下的其他情况,直接进行下一步计算,这对时间与空间都是有极大的优化
因此,设计贪心算法时,需要考虑两点
- 如何把问题分解成一步一步完成的小问题
- 如何确定或证明每一步都存在最优解
例题分析
#45. 跳跃游戏 II
##在当前格能跳到的格子中选择下一个开始的格子
##在所有格子中能够到达的距离中,要求这个格子的最远
def jump(self, nums: List[int]) -> int:
i,n_step = 0,0
if len(nums) == 1: return 0
while i + nums[i] < len(nums)-1:
n_step +=1
max_begin = 0
index = i+1
for j in range(i+1,i+nums[i]+1):
if max_begin <= j+nums[j]:
max_begin =j+nums[j]
index = j
i = index
return n_step+1