Leetcode每日一题:跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个位置。

示例 1:

输入: [2,3,1,1,4]
输出: true
解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。
示例 2:

输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game

解题思路:
1.判断能否到达最后一个位置,就是判断能跳跃的最长长度是否能超过或等于最长长度。这里我们记maxJump为当前最大跳跃长度。
我们从一个元素开始看起,随后依次增添新元素。观察新元素对maxJump影响。
【3】直接跳3步。
【3,1】直接跳3步。
【3,1,2】跳2步,再跳2步。
【3,1,2,0,1】跳2步,再跳2步,再跳1步。
【3,1,2,0,1,0】跳2步,再跳2步,再跳1步,断点。

1.元素每增加一个。最大长度覆盖该元素,就可以判断当前元素是否能更远。
2.若能更远则更新maxJump,否则不更新。
3.直到出现断点maxJump无法更新,或者此时maxJump已经超过终点。此时返回ture or false

代码实现:

	    public static boolean canJump(int[] nums) {
	        int len = nums.length;
	        int maxJump = 0;
	        for (int i = 0; i < len; ++i) {//遍历nums数组
	            if (i <= maxJump) {//若当前元素是可达的
	            	maxJump = Math.max(maxJump, i + nums[i]);//判断是否能更远跳跃,选择更新maxJump
	                if (maxJump >= len - 1) {//若maxJump已经达到或超出终点,返回true
	                    return true;
	                }
	            }
	        }
	        return false;//若直到遍历完都未到达终点,返回false
	    }
	    

你可能感兴趣的:(leetcode)