路飞_跳跃游戏

142 阅读1分钟

前言

本来以为上线的就可以舒服一阵子了,谁知道还是没有机会闲着。几个通宵下来,头脑昏昏的。算法的学习上也有些落下。

跳跃游戏

题目描述

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标

解题思路

先通过下标得到每个数可以走的最大步数

image.png

image.png

找到步长最大的继续直到超出边界

image.png

解:

 function canJump(nums) {

    let jumArr = [];
    // 根椐已有的数据得到每一步最大可以跳多远;
    for(let i = 0 ;i < nums.length; i++) {
        jumArr[i] = nums[i] + i;
    }
    
    // 设置一个最大值带表每次可以跳的最远值
    let maxJum = jumArr[0];
    let index = 0; // 跳跃循环
    while(index < nums.length && index <= maxJum) {
        // 如果可以跳的值超过预设的最远值那么覆盖
        if(maxJum < jumArr[index]) {
            maxJum = jumArr[index];
        }

        index++;
    }
    
    // 最后比较一下数组的长度与循环截止值是否相等;
    if(index == nums.length) {
        return true
    }

    return false;

};