给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
你的目标是到达最后一个下标,并且使用最少的跳跃次数。
例如:
A=[2,3,1,1,4],到达最后一个下标的最少跳跃次数为 2。(先跳跃 1 步,从下标 0 到 1,然后跳跃 3 步,到达最后一个下标。一共两次)
输入格式
第一行输入一个正整数 n(1≤n≤100) ,接下来的一行,输入 n 个整数,表示数组 A。
输出格式
最后输出最少的跳跃次数。
样例输入
5
3 1 1 1 1
样例输出
2
这题花了很长时间,实在没有思路,去看了下别人的做法,看到了关于边界的说法,然后开始自己尝试这种思路
a = int(input())
B = input().split()
j = 0
# 判断B的长度
while len(B) > 1:
X = []
# 判断B的长度和第一个元素的大小
while int(B[0]) < len(B) - 1:
#循环得到之后每一步的最大边界
for b in range(1, int(B[0])+1):
X.append(int(B[b]) + b)
# 得到边界最大的元素下标
max_index = X.index(max(X))
# 把之前的脚步抹去
B = B[max_index+1:]
# 计步数
j = j + 1
break
else:
print(j + 1, end="")
B = []
else:
# 如果B的长度等于 1 输出 0
if len(B) == 1:
print(0)
然后又想了想把不抹脚印方式
a = int(input())
B = input().split()
j = 0
i = 0
# 判断所在位置的元素是否能一步走到
while len(B)-1 > int(B[i]) + i:
X = []
#循环得到之后每一步的最大边界
for b in range(1, int(B[i])+1):
X.append(int(B[i+b]) + b)
# 得到边界最大的元素下标
max_index = X.index(max(X))
# 走一步,并记录位置
i = i + max_index + 1
j = j + 1
else:
# 如果B的长度为 1 输出 0
if len(B) == 1 :
print(0)
else:
print(j+1)