/* *题目:给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。 *算法:贪心算法:对于数组中的任意一个位置y,只要存在一个位置x,它本身可以到达,并且它跳跃的最大长度为x+nums[x],这个值大于等于y,那么位置y就可以到达。 *们依次遍历数组中的每一个位置,并实时维护 最远可以到达的位置。对于当前遍历到的位置 xxx,如果它在 最远可以到达的位置 的范围内,那么我们就可以从起点通过若干次跳跃到达该位置,因此我们可以用 x+nums[x]x + \textit{nums}[x]x+nums[x] 更新 最远可以到达的位置。 在遍历的过程中,如果 最远可以到达的位置 大于等于数组中的最后一个位置,那就说明最后一个位置可达,我们就可以直接返回 True 作为答案。反之,如果在遍历结束后,最后一个位置仍然不可达,我们就返回 False 作为答案。 * */ package cn.wanggeng.greedy; public class CanJump { public boolean canJump(int[] nums){ int len = nums.length; int right = 0; for(int i = 0; i < len; i++){ if(i <= right){ //更新最大跳跃位置 right = Math.max(right, nums[i] + i); } if(right >= len){ return true; } } return false; } }
leetcode---跳跃游戏
最新推荐文章于 2023-07-07 16:17:22 发布