嵌套娃娃 用遞迴解 串列化簡題 Leetcode #2487

小松鼠-avatar-img
發佈於演算法題目解析 個房間
更新於 發佈於 閱讀時間約 4 分鐘

題目敘述

輸入給定一個鏈結串列的head node。

要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉


例如 5->2->13->3

5的右手邊有13,所以5刪除掉。

2的右手邊有13,所以2刪除掉。

13的右手邊沒有更大的節點,所以13留著。

3的右手邊沒有更大的節點,所以3留著。

最後輸出為13->3。


原本的英文題目敘述


測試範例

Example 1:

Input: head = [5,2,13,3,8]
Output: [13,8]
Explanation: The nodes that should be removed are 5, 2 and 3.
- Node 13 is to the right of node 5.
- Node 13 is to the right of node 2.
- Node 8 is to the right of node 3.

Example 2:

Input: head = [1,1,1,1]
Output: [1,1,1,1]
Explanation: Every node has value 1, so no nodes are removed.

約束條件

 Constraints:

  • The number of the nodes in the given list is in the range [1, 10^5].

節點總數目介於 1 ~ 十萬之間。

  • 1 <= Node.val <= 10^5

每個節點的節點值也介於 1 ~ 十萬之間。


演算法 DFS遞迴解

這題的關鍵其實就隱藏在化簡規則裡。

題目說:
某個節點的右手邊只要有比較大的節點,就刪除掉


白話講,可以這麼說,通則就是

如果右邊有人比我(當下的節點)還大,則只保留右邊(相當於下個鄰居)

如果右邊沒有人比我大,則我自己保留下來,並且保留原本的連接


初始條件,也可以說 終止條件,什麼時候停下來?

當遇到空節點的時候,代表已經拜訪到串列的尾端,化簡流程結束


示意圖

raw-image

程式碼 DFS遞迴解

class Solution:
def removeNodes(self, head):

## Base case:
# Empty node or empty list
if not head:
return head

## General cases:
# Use the same pattern to carry out reduction
head.next = self.removeNodes(head.next)

# Next neighbor is larger than me, then keep neighbor alive
if head.next and head.next.val > head.val:
return head.next
else:
# Next neighbor is smaller than or equal to me, then keep myself alive
return head



複雜度分析

時間複雜度: O(n)

線性掃描,從左到右掃描每個節點,總共耗時O(n)


空間複雜度: O(n)

線性掃描,從左到右掃描每個節點,遞迴call stack最大深度為O(n)


關鍵知識點

這題的關鍵其實就隱藏在化簡規則裡。

題目說:
某個節點的右手邊只要有比較大的節點,就刪除掉


白話講,可以這麼說,通則就是

如果右邊有人比我(當下的節點)還大,則只保留右邊(相當於下個鄰居)

如果右邊沒有人比我大,則我自己保留下來,並且保留原本的連接


Reference:

[1] Remove Nodes From Linked List - LeetCode

留言
avatar-img
留言分享你的想法!
avatar-img
小松鼠的演算法樂園
96會員
427內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
2024/09/26
Leetcode 729. My Calendar I 給定一個行事曆的class定義和行程安排的介面interface。 請完成下列function 1.建構子MyCalendar() 初始化MyCalendar物件 2.boolean book(int start, int end) 插入新行程
Thumbnail
2024/09/26
Leetcode 729. My Calendar I 給定一個行事曆的class定義和行程安排的介面interface。 請完成下列function 1.建構子MyCalendar() 初始化MyCalendar物件 2.boolean book(int start, int end) 插入新行程
Thumbnail
2024/09/10
Insert Greatest Common Divisors in Linked List 題目給定一個鏈結串列, 請在兩兩節點之間加入一個新節點,新節點的值為兩者之間的最大公因數。 最後返回新串列的head node作為答案。
Thumbnail
2024/09/10
Insert Greatest Common Divisors in Linked List 題目給定一個鏈結串列, 請在兩兩節點之間加入一個新節點,新節點的值為兩者之間的最大公因數。 最後返回新串列的head node作為答案。
Thumbnail
2024/09/02
 Binary Tree Inorder Traversal 題目給定一個二元樹的根結點。 請輸出中序拜訪(In-order traversal)的拜訪序列。 中序拜訪的定義: 1.拜訪左子樹。 2.拜訪目前的節點。 3.拜訪右子樹。
Thumbnail
2024/09/02
 Binary Tree Inorder Traversal 題目給定一個二元樹的根結點。 請輸出中序拜訪(In-order traversal)的拜訪序列。 中序拜訪的定義: 1.拜訪左子樹。 2.拜訪目前的節點。 3.拜訪右子樹。
Thumbnail
看更多
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
高中數學主題練習—過圓外一點之切線
Thumbnail
高中數學主題練習—過圓外一點之切線
Thumbnail
高中數學主題練習—多項式長除法
Thumbnail
高中數學主題練習—多項式長除法
Thumbnail
高中數學主題練習—多項式長除法
Thumbnail
高中數學主題練習—多項式長除法
Thumbnail
高中數學主題練習—過圓上一點之切線
Thumbnail
高中數學主題練習—過圓上一點之切線
Thumbnail
這篇文章介紹了排列和組閤中的錯位排列和排容原理,並提供了一種相對樸實的解題方法。透過例子詳細解釋了選擇情況下的數學原理,讓讀者能夠理解並吸收。文章通過課堂上難以推敲的題目,提出了一個相對簡單的方式來解題。 圖片選自@pngtree
Thumbnail
這篇文章介紹了排列和組閤中的錯位排列和排容原理,並提供了一種相對樸實的解題方法。透過例子詳細解釋了選擇情況下的數學原理,讓讀者能夠理解並吸收。文章通過課堂上難以推敲的題目,提出了一個相對簡單的方式來解題。 圖片選自@pngtree
Thumbnail
我捨棄了編號系統,解放三倍大腦思考能量
Thumbnail
我捨棄了編號系統,解放三倍大腦思考能量
Thumbnail
題目 : 27. Remove Element
Thumbnail
題目 : 27. Remove Element
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News