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

【Leetcode】python – [56] Merge Intervals 個人解法筆記 | 內含:sorted key 搭配 lambda 的用法範例

題目出處

56. Merge Intervals

難度

medium

個人範例程式碼

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        if not intervals:
            return intervals

        intervals = sorted(intervals, key = lambda x: x[0])

        ans = []
        for i, interval in enumerate(intervals):
            if i == 0:
                prev = interval
                continue

            if prev[1] < interval[0]: # end < start  
                ans.append(prev)
                prev = interval
            else:
                prev[0] = min(prev[0], interval[0])
                prev[1] = max(prev[1], interval[1])

        ans.append(prev) # last
        return ans

最近在練習程式碼本身就可以自解釋的 Coding style,可以嘗試直接閱讀程式碼理解

算法說明

interval 經典題目,記得必須先經過 sorted 處理。

sorted 搭配 lambda 的用法

  • 針對第一個項目的排序 – lambda 法
intervals = sorted(intervals, key = lambda x: x[0])
  • 針對第二個項目的排序 – function 法

這個是留給萬一臨時忘記 lambda 怎麼寫的人,比較不漂亮,但是可行的替代方案

def sort_key(self, key):
    return key[0]
intervals = sorted(intervals, key = self.sort_key)
  • 完整的程式碼
class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        if not intervals:
            return intervals

        intervals = sorted(intervals, key = self.sort_key)

        ans = []
        for i, interval in enumerate(intervals):
            if i == 0:
                prev = interval
                continue

            if prev[1] < interval[0]: # end < start  
                ans.append(prev)
                prev = interval
            else:
                prev[0] = min(prev[0], interval[0])
                prev[1] = max(prev[1], interval[1])

        ans.append(prev) # last
        return ans

    def sort_key(self, key):
        return key[0]

input handling

如果沒有 intervals,回傳 intervals

Boundary conditions

for 處理範圍,補上最後一個區間

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 內含 BFS 模板 #重要題型
1091