非负整数是什么(非负整数不包括)

给定一个非负整数数组,您最初位于数组的第一个位置。数组中的每个元素代表在该位置可以跳转的最大长度。判断自己是否能到达最后的位置。示例1:输入:[2,3,1,1,

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

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

判断自己是否能到达最后的位置。

示例1:

输入:[2,3,1,1,4]

输出:真

说明:我们可以从位置0跳到位置1跳1步,然后从位置1跳到最后一个位置跳3步。

示例2:

输入:[3,2,1,0,4]

输出:假

说明:不管怎样,你总会到达指数为3的位置。但是这个位置的最大跳跃长度是0,所以你永远到不了最后一个位置。

保存每一步可以到达的最大距离。

这个问题问我们是否能到达最后的位置。我们首先遍历数组中的数字,然后保存他能跳到的最大距离。如果能到达最后一个位置,就直接返回true。如果达不到,我们就继续穿越。如果最大距离连下一步都达不到,我们就直接返回false。

比如第一步可以跳跃的最大距离是3,也就是说后面三个位置都可以到达。我们必须遍历接下来的三个位置,并记录这三个位置可以到达的最大距离。如果这三个位置中任意一个的最大距离可以到达最后一个位置,我们就直接返回true。

以例2为例来画图。第一个元素的值是3,所以可以到达后面的三个位置,因为前三个位置可以跳转到的最大距离是第四个位置,然后当他到达第四个位置的时候,他可以跳转到的最大距离是0,所以不能进行下一步。只需返回false。

非负整数是什么(非负整数不包括)

public boolean can jump(int[]nums){//max step表示可达距离int max step = 0;int length = nums.lengthfor(int I = 0;我& lt长度;++){//如果不能跳转到位置I,直接返回false if (I >: maxStep)返回false;//如果能跳到位置I,更新能跳的最大距离,maxstep = math.max (maxstep,I+nums[I]);//如果能跳转到最后一个位置,说明可以成功,如果(max step >: = length)返回true,直接终止循环;}返回true}

从后向前判断

你可以逆向思考。这个问题是关于从前向后跳的。我们也可以从后往前推断,从数组的倒数第二位开始。如果当前位置加上当前可以跳转的最大距离大于等于last,说明这一步跳转没问题,但是可以到达最后一步(last的初始值是数组的最后一个元素)。当你可以到第一步,也就是last等于0的时候,就意味着你可以从位置0跳到最后一个位置。

public boolean can jump(int[]nums){//last表示是否可以到达最后一个位置int last = nums . length-1;for(int I = nums . length-2;我& gt= 0;I-){//从倒数第二个位置向前遍历。如果当前位置可以//跳转到最后一个位置,则更新最后一个。如果从当前位置//无法到达最后一个位置,则继续向前遍历if(I+nums[I]>;= last)last = I;}//如果last等于0,表示可以从第一个位置跳到最后一个返回last = = 0;}

摘要

这个问题没有难度。第二种方法不容易想到。一般更容易想到第一种方案,就是判断每一步能跳的最大距离。能到达终点,就不能到达终点。如果你连下一步都走不到,那你就走不到终点。只需返回false。否则你得遍历当前位置能到达的最大位置之前的所有元素,然后记录他能跳的最大距离。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/228278.html

发表回复

登录后才能评论