算法曲解-跳跃游戏

算法曲解-跳跃游戏

首页冒险解谜Lep跳跃更新时间:2024-07-30

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

题目:

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

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

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

题解:

一个数组 int[] nums

  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;

}

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

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

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

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

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

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

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

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved