LeetCode解析------55.跳跃游戏(JAVA)

题目:

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

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

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

示例1:

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

示例2:

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

简单介绍:
题目:跳跃游戏
题目难度:中等
使用语言:JAVA。
这道题来自leetcode题库的贪心算法标签。
本题的贪心表现为,尽可能到达最远位置。

解题思路:
首先看题、分析题意,我们可以明确1个关键点:
1.如何从当前某个位置跳跃到终点位置
既然,我们已经分析出来题目的关键任务了,下面我们就可以开始思考实现了。
我们采用算法与数据结构的思路来剖析一下这题,

数据结构:
要实现对数据的操作,我们要先明确存储数据的数据结构。
该题的数据结构的作用,是保存当前位置可以到达的最远距离。
我们采用了1个int型的most变量来保存当前最远距离

算法:
既然明确了int型作为解决该题的数据结构,我们就可以开始我们的算法分析了。
1.从第0个位置开始,挨个更新该点可以到达的最远距离
2.如果该点可以到达的最远距离都不能到达下一个点,则返回false。
直到下一个点为终点,最后返回true。

代码部分:

public class Solution {
	public boolean canJump(int [] nums) {
		//代表能跳跃的最远距离,初始为0
		int most=0;
		
		//挨个点更新最远距离
		for(int i=0;i<nums.length;i++) {
			if(i>most) return false;//不可到达
			most=Math.max(most, i+nums[i]);//更新最远距离
		}
		return true;
	}
}

在这里插入图片描述

结语:
晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!

猜你喜欢

转载自blog.csdn.net/weixin_44337475/article/details/105843080
今日推荐