适用于游戏的算法(算法曲解-跳跃游戏)

所列题目,均来自网络,解题思路都是本人学习后的小小总结,喜欢的建议收藏,不喜欢拉到。

题目:

给定一个非负整数数组 nums 最初位于数组的 第一个下标

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

判断你是否能够到达最后一个下标。

题解:

一个数组 int[] nums

适用于游戏的算法(算法曲解-跳跃游戏)(1)

  1. 不管咋整,数组都得先遍历个差不多,才能知道到底行不行,
  2. 遍历到每个位置的时候,都能确定还能不能继续向下走,如果能,能走多远
  3. 如果遍历的一个位置走得不远,或者走不了,而之前遍历的位置能走很远,那么,有效的就是走得更远那个

所以,需要一个存储最远位置的变量,这样使儿的,在最远位置之前的每一个,都拿出来跟之前最远的比,然后到最后,判断最远的位置能否达到或者超过数组最后的位置。这样就能得出个结果了。

代码大概是这样:

public boolean canJump(int[] nums) {

int max = 0;

int len = nums.length-1;

for(int i=0;i<=max;i ){

max = Math.max(max, nums[i] i);

if(max>=n-1)return true;

}

return false;

}

画图描述一下大概是这样:

适用于游戏的算法(算法曲解-跳跃游戏)(2)

位置i=0; 最远的位置 num[0] 0=2 max在0,2中取大 max = 2;

适用于游戏的算法(算法曲解-跳跃游戏)(3)

位置i=1; 最远的位置 num[1] 1=1; max在2,1中取大 max = 2;

适用于游戏的算法(算法曲解-跳跃游戏)(4)

位置i=2; 最远的位置 num[2] 2=3; max在2,3中取大 max = 3;

结果为真,这里max存的是最远位置,在做for循环时也用max来做上限的约束,这样就不会一直循环到数组的最后

在满足条件时直接返回,这样就不会数组越界。

作为一个编程小白,这两个小坑,我都轻轻地踩了一下下。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页