給定一個非負(fù)整數(shù)數(shù)組嵌戈,假定你的初始位置為數(shù)組第一個下標(biāo)脚囊。
數(shù)組中的每個元素代表你在那個位置能夠跳躍的最大長度徊都。
你的目標(biāo)是到達(dá)最后一個下標(biāo),并且使用最少的跳躍次數(shù)辩蛋。
例如:
A=[2,3,1,1,4]呻畸,到達(dá)最后一個下標(biāo)的最少跳躍次數(shù)為 2。(先跳躍 1 步悼院,從下標(biāo) 0 到 1伤为,然后跳躍 3 步,到達(dá)最后一個下標(biāo)。一共兩次)
輸入格式
第一行輸入一個正整數(shù) n(1≤n≤100) 绞愚,接下來的一行叙甸,輸入 n 個整數(shù),表示數(shù)組 A位衩。
輸出格式
最后輸出最少的跳躍次數(shù)裆蒸。
樣例輸入
5
3 1 1 1 1
樣例輸出
2
這題花了很長時間,實(shí)在沒有思路糖驴,去看了下別人的做法僚祷,看到了關(guān)于邊界的說法,然后開始自己嘗試這種思路
a = int(input())
B = input().split()
j = 0
# 判斷B的長度
while len(B) > 1:
X = []
# 判斷B的長度和第一個元素的大小
while int(B[0]) < len(B) - 1:
#循環(huán)得到之后每一步的最大邊界
for b in range(1, int(B[0])+1):
X.append(int(B[b]) + b)
# 得到邊界最大的元素下標(biāo)
max_index = X.index(max(X))
# 把之前的腳步抹去
B = B[max_index+1:]
# 計步數(shù)
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 = []
#循環(huán)得到之后每一步的最大邊界
for b in range(1, int(B[i])+1):
X.append(int(B[i+b]) + b)
# 得到邊界最大的元素下標(biāo)
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)