計(jì)蒜客 第十九題 跳躍游戲二

給定一個非負(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:]
        # 計(jì)步數(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)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容