核心内容摘要
《斗罗大陆》:唐三与比比东的爱恨纠葛,一曲《白山崖》诉尽悲欢离合
跳跃游戏 | 贪心算法最优解LeetCode经典题题目描述给定一个非负整数数组nums你最初位于数组的第一个下标。
数组中每个位置的元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达数组的最后一个下标能则返回true不能则返回false。
核心特征分析处理对象为数组类问题这类问题通常可优先考虑动态规划或贪心算法解决题目中“每个位置的元素代表能跳跃的最大长度”是贪心算法的典型应用特征——无需关注具体跳跃路径只需聚焦“能到达的最远范围”即可验证可行性。
算法选择与思路算法选择本题仅需验证“能否到达最后一个下标”的可行性无需罗列具体跳跃路径因此选择贪心算法是最优解相比动态规划贪心算法时间复杂度相同且空间复杂度更低。
贪心算法核心思路维护变量max_length表示当前能到达的最大索引位置遍历数组中的每个索引i若当前索引i超过max_length说明无法到达该位置直接返回false更新max_length为max(max_length, i nums[i])当前能到达的最远位置 历史最远位置 和 当前位置可跳最远位置 的较大值若max_length已≥数组最后一个索引说明能到达终点直接返回true遍历结束后兜底判断max_length是否≥数组最后一个索引适配数组长度为1等边界场景。
完整解题代码classSolution{public:boolcanJump(vectorintnums){intnnums.size();intmax_length0;for(inti0;in;i){if(imax_length)returnfalse;max_lengthmax(max_length,inums[i]);if(max_lengthn-
returntrue;}returnmax_lengthn-1;}};复杂度分析时间复杂度O(n)。
仅需遍历一次数组n为数组长度空间复杂度O(
。
仅使用常数级额外空间max_length、n、i三个变量。