題目出處
難度
Medium
個人範例程式碼
一開始建了一個新的答案的 list
class Solution:
def canJump(self, nums: List[int]) -> bool:
if len(nums) <= 1:
return True
max_can_reach_idx = [0 for _ in range(len(nums))]
for i, num in enumerate(nums):
if i == 0:
max_can_reach_idx[0] = num+i
if i > 0 and max_can_reach_idx[i-1] >= i:
max_can_reach_idx[i] = max(max_can_reach_idx[i-1], num+i)
return max_can_reach_idx[-1] > 0
後來發現可以簡化至單一個 max_idx 即可,並當發現不行時,提早 early return
class Solution:
def canJump(self, nums: List[int]) -> bool:
max_idx = 0
for i, num in enumerate(nums):
if i > max_idx: # can not reach, first 0 > 0
return False
max_idx = max(num+i, max_idx)
return max_idx >= len(nums)-1 # 4 >= 5-1
最近在練習程式碼本身就可以自解釋的 Coding style,可以嘗試直接閱讀程式碼理解
算法說明
透過建立一個新的 list,我們紀錄
- 前一個 idx 最大可抵達的位置
- 相比前一個 idx 最大可抵達位置,看下一個位置是否能抵達,同時取 max(此位置能抵達的最遠, 上一個位置能抵達的最遠)
input handling
如果 input len <= 1,return True
Boundary conditions
後來優化的版本中,其實當發現 max_idx 已經到不了的時候,就已經可以 early return 了
第一個版本是一定會算完
Reference
⭐ Leetcode 解題紀錄 ⭐ | 題型 | 資料結構 | Python Solution | C++ Solution | Note | |
---|---|---|---|---|---|---|
⭐BFS 相關題型 ⭐ | ||||||
104 | Maximum Depth of Binary Tree | BFS (分層) | Python | |||
94 | Binary Tree Inorder Traversal | BFS (分層) | Tree | Python | 內含 處理 Tree 樹問題的重點 | |
102 | Binary Tree Level Order Traversal | BFS (分層) | Tree | Python | ||
103 | Binary Tree Zigzag Level Order Traversal | BFS (分層) | Tree | Python | ||
107 | Binary Tree Level Order Traversal II | BFS (分層) | Tree | Python | ||
133 | Clone Graph | BFS (分層) | Graph | Python | Graph 的基本操作 #重要題型 | |
127 | Word Ladder | BFS (分層), DFS | Graph | Python | ||
[Lint] 127 | Topological Sorting | BFS (拓撲) | Python | 內有 indegree, outdegree 介紹 #重要題型 | ||
207 | Course Schedule | BFS (拓樸) | Graph | Python | ||
210 | Course Schedule II | BFS (拓樸) | Graph | Python | ||
[Lint] 892 | Alien Dictionary | BFS (拓樸) | Graph | Python | ||
[Lint] 431 | Connected Component in Undirected Graph | BFS (連通塊) | Graph | Python |