項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 search-input 尚未註冊或是沒有一個 view.php 檔案.

【Leetcode】python – [55] Jump Game 個人解法筆記

題目出處

55. Jump Game

難度

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,我們紀錄

  1. 前一個 idx 最大可抵達的位置
  2. 相比前一個 idx 最大可抵達位置,看下一個位置是否能抵達,同時取 max(此位置能抵達的最遠, 上一個位置能抵達的最遠)

input handling

如果 input len <= 1,return True

Boundary conditions

後來優化的版本中,其實當發現 max_idx 已經到不了的時候,就已經可以 early return 了
第一個版本是一定會算完

Reference

⭐ Leetcode 解題紀錄 ⭐題型資料結構Python SolutionC++ SolutionNote
⭐BFS 相關題型 ⭐
104Maximum Depth of Binary TreeBFS (分層)Python
94Binary Tree Inorder TraversalBFS (分層)TreePython 內含 處理 Tree 樹問題的重點
102Binary Tree Level Order TraversalBFS (分層)TreePython
103Binary Tree Zigzag Level Order TraversalBFS (分層)TreePython
107Binary Tree Level Order Traversal IIBFS (分層)TreePython
133Clone GraphBFS (分層)GraphPython Graph 的基本操作 #重要題型
127Word LadderBFS (分層), DFSGraphPython
[Lint] 127Topological SortingBFS (拓撲)Python
內有 indegree, outdegree 介紹 #重要題型
207Course ScheduleBFS (拓樸)GraphPython
210Course Schedule IIBFS (拓樸)GraphPython
[Lint] 892Alien DictionaryBFS (拓樸)GraphPython
[Lint] 431Connected Component in Undirected GraphBFS (連通塊)GraphPython