Leetcode55-跳跃游戏-解决方案和分析问题描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表您可以在该位置跳跃的最大长度。确定您是否可以到达最后一个位置。示例1:输入:[2,3,1,1,4]输出:true解释:我们可以先跳1步,从位置0到位置1,然后从位置1跳3步到最后一个位置。示例2:输入:[3,2,1,0,4]输出:false解释:无论如何,你总是会到达索引为3的位置。但是那个位置的最大跳跃长度是0,所以你永远不能到达最后一个位置。提交答案类解决方案{publicbooleancanJump(int[]nums){intlength=nums.length;intfarPosition=1;for(inti=0;i=farPosition){farPosition=nums[i]+i+1;}if(farPosition>=length){返回真;}}返回假;}}执行时间:1ms,击败所有Java投稿99.93%用户内存消耗:41.6MB,击败所有Java投稿用户12.50%问题解决思路本题采用贪心法作为整体解题思路。即:保持一个最远可达的位置(farPosition)。依次遍历数组中的每一项。如果此时的索引小于最远可到达的位置,那么该item是可达的,但是是否能到达数据中的最后一个item还需要判断。判断当前item的index和value之和是否大于最远可达位置。如果是,则将最远可达区域更新为索引值和当前项的值。如果当前可达的位置大于数组的长度,也表示可以直接到达数组的最后一个位置,直接返回true即可,否则返回false。复杂度分析时间复杂度:O(n),最坏的情况是数组的所有元素都会依次循环。空间复杂度:O(1),通过farPosition记录最远可达的位置,不需要额外的空间开销。这道题整体来说比较简单,先总结这么多,继续练算法!来源:Teamindhttps://teamind.co/欢迎转载,也请保留本声明。谢谢!