欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 力扣55-跳跃游戏(java详细题解)

力扣55-跳跃游戏(java详细题解)

2024/10/24 9:21:13 来源:https://blog.csdn.net/2302_79761426/article/details/141679864  浏览:    关键词:力扣55-跳跃游戏(java详细题解)

题目链接:55. 跳跃游戏 - 力扣(LeetCode)

前情提要:

因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。

贪心方法:局部最优推出全局最优。

如果一个题你觉得可以用局部最优推出全局最优,并且没有反例来反驳的话就可以用贪心来试试。

题目思路:

该题也不好入手,我们会纠结第一步跳哪,第二步跳哪,最终能不能跳到终点。

如果纠结某一步跳什么地方的话,那么这个题就很难想出来了。

其实我们可以换一个维度,我们直接找覆盖范围,遍历每一个元素,尽可能的去增加他的覆盖范围,只要覆盖范围能大于等于终点,就直接返回true。

局部最优:遍历每一个元素时,尽可能的增大覆盖范围

全局最优,达到最大覆盖范围

我们不用纠结怎么跳,只要能达到终点即可。

具体的代码细节我在代码部分讲。

最终代码:

class Solution {public boolean canJump(int[] nums) {//定义range变量表示范围int range = 0;//如果只有一个元素,肯定是可以跳到终点的if(nums.length == 1)return true;//注意这里i <= range很重要//我们是要在覆盖范围内遍历我们的元素 再去增加我们的覆盖范围//不在覆盖范围内去增加是没有意义的for(int i = 0;i <= range;i ++){//为什么这里取最大值很关键//我要在我已有的覆盖范围内得到跳跃的长度用来增加我的覆盖范围//range 每次只取 max(该元素数值补充后的范围, range 本身范围)。//如果不取最大值 那么我的这个覆盖范围可能还会减小 //所以这个range要维护一个最大的覆盖范围range = Math.max(i + nums[i],range);//只要覆盖范围超过最后一个元素 则返回trueif(range >= nums.length - 1){return true;}}return false;}
} 

这一篇博客就到这了,如果你有什么疑问和想法可以打在评论区,或者私信我。

我很乐意为你解答。那么我们下篇再见!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com