跳跃游戏之贪心算法

贪心算法

一、基本概念

贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

二、贪心算法的基本思路

1.建立数学模型来描述问题
2.把求解的问题分成若干个子问题
3.对每个子问题求解,得到子问题的局部最优解
4.把子问题的解局部最优解合成原来问题的一个解

三、该算法存在的问题

1.不能保证解是最佳的。因为贪心算法总是从局部出发,并没从整体考虑
2.贪心算法一般用来解决求最大或最小解
3.贪心算法只能确定某些问题的可行性范围

四、使用贪心算法的两个条件

1.最优子结构性质
如果一个问题的最优解包含其子问题的最优解,我们就称此问题具有最优子结构性质。
2.贪心选择性质
对于某个问题,如果我们可以通过做出局部最优(贪心)选择来构造全局最优解,那么我们就称该问题具有贪心选择性质。

跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。

示例 1:
输入: [2,3,1,1,4]
输出: true
解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。

示例 2:
输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

思路:
1.不考虑每一步的如何向后跳跃
2.考虑是否可以到本位置,如果可以则计算本位置可跳跃的最远位置
3.选择记录最大的max_pos
4.遍历完后,若max_pos不小于末尾位置,return true

代码如下:
跳跃游戏之贪心算法_第1张图片
如有问题欢迎指出~

你可能感兴趣的:(跳跃游戏之贪心算法)