数组移动跳跃

数组移动跳跃_牛客网

https://www.nowcoder.com/practice/3f99492e23d9403d923e44bb1061cc86?tpId=98&tqId=32885&tPage=4&rp=4&ru=/ta/2019test&qru=/ta/2019test/question-ranking

题目描述:

给定一个非空的整数数组,从数组第一个元素(下标为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

解题思路:

对数组进行遍历访问,并使用一个额外数组记录访问过的索引节点,若当前索引值小于0或大于数组的长度,则输出true,若当前节点已访问两次,则输出false。

完整代码:

a = input()
a = a[1: len(a) - 1]
a = list(map(int, a.split(',')))
dp = [0 for i in range(len(a))]

def calc(a, dp):
  i = 0
  while i >= 0 and i < len(a):
    if dp[i] == 1:
      return False
    dp[i] = 1
    i += a[i]
  return True

if calc(a, dp):
  print('true')
else:
  print('false')



全部评论

相关推荐

11-27 21:29
已编辑
武汉理工大学 Java
点赞 评论 收藏
分享
牛至超人:把哈工大,再加大加粗,看见闪闪发光的哈工大字样,面试官直接流口水
投递字节跳动等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务