來源:LeetCode 第55題
給定一個非負整數數組,你最初位於數組的第一個位置。
數組中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最后一個位置。
示例 1:
輸入: [2,3,1,1,4] 輸出: true 解釋: 從位置 0 到 1 跳 1 步, 然后跳 3 步到達最后一個位置。
示例 2:
輸入: [3,2,1,0,4] 輸出: false 解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最后一個位置。
代碼如下:
1 class Solution: 2 def canJump(self, nums): 3 """ 4 :type nums: List[int] 5 :rtype: bool 6 """ 7 max_reach,last_index=0,len(nums)-1 8 for i,x in enumerate(nums): 9 if max_reach<i: 10 return False 11 if max_reach>=last_index: 12 return True 13 max_reach=max(max_reach,i+x)
來源:LeetCode 第45題
給定一個非負整數數組,你最初位於數組的第一個位置。
數組中的每個元素代表你在該位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達數組的最后一個位置。
示例:
輸入: [2,3,1,1,4] 輸出: 2 解釋: 跳到最后一個位置的最小跳躍數是2
。 從下標為 0 跳到下標為 1 的位置,跳1
步,然后跳3
步到達數組的最后一個位置。
說明:
假設你總是可以到達數組的最后一個位置。
思路如下:
代碼如下:
1 class Solution: 2 def jump(self, nums): 3 """ 4 :type nums: List[int] 5 :rtype: int 6 """ 7 start=end=step=0 8 while end<len(nums)-1: 9 start,end=end+1,max(i+nums[i] for i in range(start,end+1)) 10 step+=1 11 return step