跳跃游戏之贪心算法

贪心算法

一、基本概念

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

二、贪心算法的基本思路

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

代码如下:
在这里插入图片描述
如有问题欢迎指出~

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值