鍊表應用: 簡化鏈結串列 Remove Zero Sum Nodes_Leetcode #1171

閱讀時間約 4 分鐘

題目敘述

題目會給定一個鏈結串列的起始點,要求我們把其中區間總和為0的部分刪除掉

例如

1→ 2 → -2 → 3 → 4

裡面有一段是2 → -2 區間總和為零,所以簡化刪除後變成

1→ 3 → 4


題目的原文敘述


測試範例

Example 1:

Input: head = [1,2,-3,3,1]
Output: [3,1]
Note: The answer [1,2,1] would also be accepted.

Example 2:

Input: head = [1,2,3,-3,4]
Output: [1,2,4]

Example 3:

Input: head = [1,2,3,-3,-2]
Output: [1]

約束條件

Constraints:

  • The given linked list will contain between 1 and 1000 nodes.

鏈結串列的節點總數目介於1~1000。

  • Each node in the linked list has -1000 <= node.val <= 1000.

節點值都介於-1000 ~ 1000之間。


演算法 前綴和 + 字典

這題會用到以前學過的前綴和技巧。

從左到右滾動依序計算前綴和,並且把每個前綴和對應的節點存到字典裡面

如果當下在某個位置前綴和為S,而且在字典裡面又發現前面曾經看過前綴和S,
那麼代表從前面到現在這個位置,區間的區間總和恰為0。


舉個實際的例子幫助讀者理解

假設輸入為 12-234

前綴和分別為

1, 3, 1, 4, 8

前綴和1看過兩次,代表區間 2 → -2 的區間節點總和為0,也就是我們要簡化刪除的地方。

簡化之後,新的鏈結串列變成

1→ 3 → 4


示意圖

image.png

image.png



程式碼 前綴和 + 字典

class Solution:
def removeZeroSumSublists(self, head: ListNode) -> ListNode:

# DummyHead makes zero sum handling easier
dummyHead = ListNode(0, head)

# prefix sum so far
prefixSum = 0

## Dictionay:
# key: prefix sum
# value: right most node who has this prefix sum
rightMost = {0: dummyHead}

# Update right most position for each prefix sum
cur = head
while cur:
prefixSum += cur.val
rightMost[prefixSum] = cur
cur = cur.next


# Skip and connect to right most position for already know prefix sum
cur, prefixSum = dummyHead, 0
while cur:
prefixSum += cur.val
junction = rightMost.get(prefixSum, cur)
cur.next = junction.next
cur = cur.next

return dummyHead.next

複雜度分析 前綴和 + 字典

時間複雜度:

線性掃描兩次,所需時間為O(n)。


空間複雜度:

需要建立一個前綴和字典,所需空間為O(n)。


關鍵知識點

同樣的前綴和若出現兩次以上,代表存在有區間總和為0的區間

Reference:

[1] Remove Zero Sum Consecutive Nodes from Linked List - LeetCode

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目敘述 題目會給我們一個鏈結串列的起點head,要求我們找出這個串列的中點。 註: 如果串列長度是偶數,就回傳中間偏右的那個節點。 例如: 1 -> 2 -> 3 回傳中點為2 1 -> 2 -> 3 -> 4 ->5 -> 6 回傳中點為4 詳細的題目可在這裡看到 測試範例
題目會給定一個帶有Random Pointer的鏈結串列,要求我們實體複製deep copy這條鏈結串列,並且輸出副本的根結點。
題目會給定我們一個串列,和一個n值,要求我們刪除尾巴數來的第n個節點。 例如 1->2->3->4->5 和 給定n值=2,要求我們刪除尾巴數來的第2個節點。 尾巴數來的第2個節點是4,刪除之後,更新連結,輸出答案如下 1->2->3->5
題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。
題目敘述 題目會給我們一個鏈結串列的起點head,要求我們找出這個串列的中點。 註: 如果串列長度是偶數,就回傳中間偏右的那個節點。 例如: 1 -> 2 -> 3 回傳中點為2 1 -> 2 -> 3 -> 4 ->5 -> 6 回傳中點為4 詳細的題目可在這裡看到 測試範例
題目會給定一個帶有Random Pointer的鏈結串列,要求我們實體複製deep copy這條鏈結串列,並且輸出副本的根結點。
題目會給定我們一個串列,和一個n值,要求我們刪除尾巴數來的第n個節點。 例如 1->2->3->4->5 和 給定n值=2,要求我們刪除尾巴數來的第2個節點。 尾巴數來的第2個節點是4,刪除之後,更新連結,輸出答案如下 1->2->3->5
題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
有些人我們時常會說他們說出口的話語「一語中的」,用很精準的詞彙就能明確表達想法;有些人則是舌粲蓮花擁有絕佳的口才但細究內容卻空洞貧乏;有些人則是長篇大論仍然讓人摸不著真正想表達的內容。 到底,該怎麼說才能在最短的時間內讓人立即理解,這並不是所謂的「說話技巧」,而是必須先保持頭腦清晰且善於思考過
Thumbnail
本文將深入探討鏈表的核心概念,使用 JavaScript 來說明如何實現和操作鏈表(Linked List),包括 append、prepend、remove、find 和 reverse 等五大方法。
Thumbnail
這本書教你如何通過書寫來提升自己的言詞化能力,而不是僅僅強調說話技巧。這本書提供了許多實用的寫作和練習技巧,同時附贈了職場對話範例和訓練題庫。這對於想要提高溝通能力的人來說是一本非常實用的書籍。
Thumbnail
一個好的心肺訓練要包含: 1.暖身 2.體能階段 3.收操(冷卻階段) 熱身是為了體能階段做好身體準備,在體能階段要達到訓練強度,並允許適當的超負荷,收操可以讓人恢復到休息水平
Thumbnail
今晚有例行的線上讀書會,這次的主題與時間運用有關,最近對於使用時間有很多心得,我迫不及待想和夥伴分享,於是時間ㄧ到,立刻準時上線參與。
前言 在了解自己一周有幾天能訓練之後,訓練日的課表安排什麼也是非常重要的,如果動作順序選擇錯誤,可能會讓了解自己成長的幅度降低。在這篇文章中,我會用我自己的課表帶你了解一個課表的組成與安排邏輯,帶你輕鬆安排一個屬於你的課表,那就讓我們開始吧!
Thumbnail
蘋果在2021年4月春季發佈會中首度發表搭載Mini LED背光顯示器的iPad Pro,而剛在南港展覽館結束不久的全球顯示器展覽也在展區中展示多種採用Mini LED的電視、電腦、顯示器等應用,都意味著Mini LED將正式商用化,並帶動顯示器背光技術的典範轉移。
Thumbnail
瘋狂100下二頭啞鈴彎舉、毫無目的100下捲腹練腹肌,這樣應該就能擁有「雷神索爾」般的身材吧? 事實結果卻不是你想的那樣,訓練是循序漸進的。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
有些人我們時常會說他們說出口的話語「一語中的」,用很精準的詞彙就能明確表達想法;有些人則是舌粲蓮花擁有絕佳的口才但細究內容卻空洞貧乏;有些人則是長篇大論仍然讓人摸不著真正想表達的內容。 到底,該怎麼說才能在最短的時間內讓人立即理解,這並不是所謂的「說話技巧」,而是必須先保持頭腦清晰且善於思考過
Thumbnail
本文將深入探討鏈表的核心概念,使用 JavaScript 來說明如何實現和操作鏈表(Linked List),包括 append、prepend、remove、find 和 reverse 等五大方法。
Thumbnail
這本書教你如何通過書寫來提升自己的言詞化能力,而不是僅僅強調說話技巧。這本書提供了許多實用的寫作和練習技巧,同時附贈了職場對話範例和訓練題庫。這對於想要提高溝通能力的人來說是一本非常實用的書籍。
Thumbnail
一個好的心肺訓練要包含: 1.暖身 2.體能階段 3.收操(冷卻階段) 熱身是為了體能階段做好身體準備,在體能階段要達到訓練強度,並允許適當的超負荷,收操可以讓人恢復到休息水平
Thumbnail
今晚有例行的線上讀書會,這次的主題與時間運用有關,最近對於使用時間有很多心得,我迫不及待想和夥伴分享,於是時間ㄧ到,立刻準時上線參與。
前言 在了解自己一周有幾天能訓練之後,訓練日的課表安排什麼也是非常重要的,如果動作順序選擇錯誤,可能會讓了解自己成長的幅度降低。在這篇文章中,我會用我自己的課表帶你了解一個課表的組成與安排邏輯,帶你輕鬆安排一個屬於你的課表,那就讓我們開始吧!
Thumbnail
蘋果在2021年4月春季發佈會中首度發表搭載Mini LED背光顯示器的iPad Pro,而剛在南港展覽館結束不久的全球顯示器展覽也在展區中展示多種採用Mini LED的電視、電腦、顯示器等應用,都意味著Mini LED將正式商用化,並帶動顯示器背光技術的典範轉移。
Thumbnail
瘋狂100下二頭啞鈴彎舉、毫無目的100下捲腹練腹肌,這樣應該就能擁有「雷神索爾」般的身材吧? 事實結果卻不是你想的那樣,訓練是循序漸進的。