首页 > 试题广场 >

数组移动跳跃

[编程题]数组移动跳跃
  • 热度指数:5294 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个非空的整数数组,从数组第一个元素(下标为0的元素)开始遍历进行移动,下一次向后或向前移动 该元素的值 的位数(值为正数向后移动,值为负数向前移动,值为零不移动),依次类推进行移动,若某次移动数组出现越界,则说明数组可以跳出,返回true;不能跳出则返回false;(加分项:也可考虑不增加使用其他集合数组辅助完成算法)
例1:
输入数组a[5] = [1,2,3,2,5];从第一个元素开始a[0]=1,下次向后移动1位到第二个元素a[1]=2,再次向后移动2位到第四个元素a[3],因为下次向后移动2位(a[3]=2)后,向后数组越界,即跳出数组,输出true;
例2:
输入数组a[2] = [1,-3];从第一个元素开始a[0]=1,下次移动1位到第二个元素a[1]=-3,再次向前移动3位后,向前数组越界,即跳出数组,输出true;



输入描述:
一个非空的整数数组(至少有一个元素,可正可负)


输出描述:
按规则移动后是否能跳出数组
示例1

输入

[1]

输出

true
示例2

输入

[2,1,3,5]

输出

true
示例3

输入

[2,1,-3]

输出

true
示例4

输入

[1,1,1,2,-1,1,-3]

输出

false
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
var num = [];
var flag = true;
var len = 0;
var index = 0;
var flagIndex = []; 
rl.on('line', line => {
    num = JSON.parse(line.trim());
    flagIndex.fill(0);
    len = num.length;
    while(index < len) {
        flagIndex[index] = 1;
        index = index + num[index];
        if(flagIndex[index] == 1) {
            flag = false;
            break;
        }
    }
    console.log(flag);
})
发表于 2020-03-21 00:02:31 回复(0)
JavaScript(Node) 😎题目:有赞👍-数组移动跳跃
const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    ouput: process.stdout
})
let inArr = []
rl.on('line',line=>{
    if(!line) return
    inArr.push(line.trim())
    if(inArr.length === 1){
        let arr = inArr[0].slice(1,-1).split(',').map(e=>+e)
        let dp = new Array(arr.length+1).fill(1)
        let i = 0
        let flag = true
        while (i<arr.length) {
            dp[i]=0
            i+=arr[i]
            if(dp[i] == 0){
                console.log(false)
                flag = false
                break
            }
        }
        if(flag){
            console.log(true)
        }
    }
})
发表于 2020-03-01 17:52:10 回复(0)