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

閱讀時間約 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

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 組合數之和 Combination Sum 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所以可能的情況,
今天的一魚三吃系列是透過 兩點之間是否存在一條路徑的題目,來回顧以前學過的DFS、BFS和Disjoint Set,鞏固圖論演算法的知識點。 英文的題目敘述在這裡 題目敘述 給定我們已知n個節點的圖,和圖上的每一條無向邊edges。 請問給定的起點start和終點end是否存在一條路徑可
今天的官方每日一題是Island Perimeter島嶼周長,很有趣的一題。 題目非常直觀好懂。也很適合拿來作為多角度複習、回顧圖論演算法的好題目。 英文的題目敘述在這裡 題目敘述 題目會給我們一個二維陣列當作地圖,格子點為1代表陸地,格子點為0代表海洋。 要求我們以四連通N4的方式拜訪
題目敘述 題目會給定一顆二元樹的根結點, 要求我們在指定的層樹d,插入新的一層,節點值為v。 原本的左、右子樹,就成為新的那一層的左子樹、右子樹。 題目的原文敘述 測試範例 Example 1: Input: root = [4,2,6,3,1,5], val = 1, depth =
這篇文章,會帶著大家複習以前學過的DFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 DFS 深度優先搜索框架 def dfs( parameter ): # 邊界條件 if base case or stop cond
這篇文章,會帶著大家複習以前學過的BFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 BFS 框架 + 演算法 虛擬碼 # Queue 通常初始化成根結點,作為起點 BFS_queue = deque([root])​ # 先
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 組合數之和 Combination Sum 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所以可能的情況,
今天的一魚三吃系列是透過 兩點之間是否存在一條路徑的題目,來回顧以前學過的DFS、BFS和Disjoint Set,鞏固圖論演算法的知識點。 英文的題目敘述在這裡 題目敘述 給定我們已知n個節點的圖,和圖上的每一條無向邊edges。 請問給定的起點start和終點end是否存在一條路徑可
今天的官方每日一題是Island Perimeter島嶼周長,很有趣的一題。 題目非常直觀好懂。也很適合拿來作為多角度複習、回顧圖論演算法的好題目。 英文的題目敘述在這裡 題目敘述 題目會給我們一個二維陣列當作地圖,格子點為1代表陸地,格子點為0代表海洋。 要求我們以四連通N4的方式拜訪
題目敘述 題目會給定一顆二元樹的根結點, 要求我們在指定的層樹d,插入新的一層,節點值為v。 原本的左、右子樹,就成為新的那一層的左子樹、右子樹。 題目的原文敘述 測試範例 Example 1: Input: root = [4,2,6,3,1,5], val = 1, depth =
這篇文章,會帶著大家複習以前學過的DFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 DFS 深度優先搜索框架 def dfs( parameter ): # 邊界條件 if base case or stop cond
這篇文章,會帶著大家複習以前學過的BFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 BFS 框架 + 演算法 虛擬碼 # Queue 通常初始化成根結點,作為起點 BFS_queue = deque([root])​ # 先
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
我喜歡玫瑰凋零的樣子 花瓣充滿縐褶紋理 零散的散落在地的樣子 那場景好似淒美,卻只是時間流淌留下的痕跡
Thumbnail
拳套打很快不適搏擊實戰 重整修練修正 拳套打超快不適合搏擊格鬥。和實戰搏擊不同。 實戰搏擊是瞬間演作的快。無法預知測試。 兩者大大不同。必須修正。 浪子快快回頭。落葉知秋。憂鬱苦辛方能創造。 捨棄拳套。只需三和弦疊組變化即可。
Thumbnail
當採用MLM, MLR, or WLSM...等等估計法時,Mplus 會警告不能無法像ML一樣兩個巢套模型直接相減取得正確的Chi-Square和顯著性。所以我們需要用網站自動計算器或額外語法幫我們計算Chi-Square的差異,以下分別介紹不同估計法要用的方法:
Thumbnail
靈感來自於優里-ドライフラワー
乾燥野菜 市場の現状と将来展望に関する包括的な洞察を提供する、車速センサー市場2023年調査報告書がリリースされました。当レポートでは、業界の市場動向、成長促進要因、課題、機会などの詳細な分析に加え、競争環境と市場主要企業の市場シェア分析についても徹底検証しています。https://issuu.
乾燥熱滅菌 市場の現状と将来展望に関する包括的な洞察を提供する、車速センサー市場2023年調査報告書がリリースされました。当レポートでは、業界の市場動向、成長促進要因、課題、機会などの詳細な分析に加え、競争環境と市場主要企業の市場シェア分析についても徹底検証しています。https://issuu
乾燥粉末吸入器 市場の現状と将来展望に関する包括的な洞察を提供する、車速センサー市場2023年調査報告書がリリースされました。当レポートでは、業界の市場動向、成長促進要因、課題、機会などの詳細な分析に加え、競争環境と市場主要企業の市場シェア分析についても徹底検証しています。https://iss
乾燥酵母 市場の現状と将来展望に関する包括的な洞察を提供する、車速センサー市場2023年調査報告書がリリースされました。当レポートでは、業界の市場動向、成長促進要因、課題、機会などの詳細な分析に加え、競争環境と市場主要企業の市場シェア分析についても徹底検証しています。https://issuu.
乾燥酵母 市場の現状と将来展望に関する包括的な洞察を提供する、車速センサー市場2023年調査報告書がリリースされました。当レポートでは、業界の市場動向、成長促進要因、課題、機会などの詳細な分析に加え、競争環境と市場主要企業の市場シェア分析についても徹底検証しています。https://minkab
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
我喜歡玫瑰凋零的樣子 花瓣充滿縐褶紋理 零散的散落在地的樣子 那場景好似淒美,卻只是時間流淌留下的痕跡
Thumbnail
拳套打很快不適搏擊實戰 重整修練修正 拳套打超快不適合搏擊格鬥。和實戰搏擊不同。 實戰搏擊是瞬間演作的快。無法預知測試。 兩者大大不同。必須修正。 浪子快快回頭。落葉知秋。憂鬱苦辛方能創造。 捨棄拳套。只需三和弦疊組變化即可。
Thumbnail
當採用MLM, MLR, or WLSM...等等估計法時,Mplus 會警告不能無法像ML一樣兩個巢套模型直接相減取得正確的Chi-Square和顯著性。所以我們需要用網站自動計算器或額外語法幫我們計算Chi-Square的差異,以下分別介紹不同估計法要用的方法:
Thumbnail
靈感來自於優里-ドライフラワー
乾燥野菜 市場の現状と将来展望に関する包括的な洞察を提供する、車速センサー市場2023年調査報告書がリリースされました。当レポートでは、業界の市場動向、成長促進要因、課題、機会などの詳細な分析に加え、競争環境と市場主要企業の市場シェア分析についても徹底検証しています。https://issuu.
乾燥熱滅菌 市場の現状と将来展望に関する包括的な洞察を提供する、車速センサー市場2023年調査報告書がリリースされました。当レポートでは、業界の市場動向、成長促進要因、課題、機会などの詳細な分析に加え、競争環境と市場主要企業の市場シェア分析についても徹底検証しています。https://issuu
乾燥粉末吸入器 市場の現状と将来展望に関する包括的な洞察を提供する、車速センサー市場2023年調査報告書がリリースされました。当レポートでは、業界の市場動向、成長促進要因、課題、機会などの詳細な分析に加え、競争環境と市場主要企業の市場シェア分析についても徹底検証しています。https://iss
乾燥酵母 市場の現状と将来展望に関する包括的な洞察を提供する、車速センサー市場2023年調査報告書がリリースされました。当レポートでは、業界の市場動向、成長促進要因、課題、機会などの詳細な分析に加え、競争環境と市場主要企業の市場シェア分析についても徹底検証しています。https://issuu.
乾燥酵母 市場の現状と将来展望に関する包括的な洞察を提供する、車速センサー市場2023年調査報告書がリリースされました。当レポートでは、業界の市場動向、成長促進要因、課題、機会などの詳細な分析に加え、競争環境と市場主要企業の市場シェア分析についても徹底検証しています。https://minkab