經典串列題 合併已排序好的兩條串列 Merge Two Sorted Lists Leetcode #21

閱讀時間約 3 分鐘
raw-image

這題的題目在這裡:

題目敘述

題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。


測試範例

Example 1:

raw-image
Input: list1 = [1,2,4], list2 = [1,3,4]
Output: [1,1,2,3,4,4]

Example 2:

Input: list1 = [], list2 = []
Output: []

Example 3:

Input: list1 = [], list2 = [0]
Output: [0]

約束條件

Constraints:

  • The number of nodes in both lists is in the range [0, 50].
  • -100 <= Node.val <= 100
  • Both list1 and list2 are sorted in non-decreasing order.

演算法

raw-image

其實這一題可以結合經典的雙指針、遞迴的技巧,簡潔的解開。

介面與參數:
list1, list2 分別指向兩條串列頭部當下要比較的位置

通則:
如果list1當下節點的值 比 list2當下節點的的值還小,則list1放在前面,並且list1指向下一回合次小的節點。

同樣的道理,對於另一種情況也是對稱的。

如果list2當下節點的值 比 list1當下節點的的值還小,則list2放在前面,並且list2指向下一回合次小的節點。

終止條件:
如果list2已經空了,那麼已經不需要比較和合併,直接回傳list1即可。

同樣的道理,對於另一種情況也是對稱的。

如果list1已經空了,那麼已經不需要比較和合併,直接回傳list2即可。


程式碼

class Solution:
 def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
  
  # List 1 is empty, then result is decided by List 2
  if not list1:
   return list2
  
  # List 2 is empty, then result is decided by List 1
  if not list2:
   return list1
  
  # General cases: compare node value, and update linkage
  if list1.val < list2.val:
   list1.next = self.mergeTwoLists(list1.next, list2)
   return list1
   
  else:
   list2.next = self.mergeTwoLists(list1, list2.next)
   return list2

複雜度分析

另 m, n 分別為list1, list2串列的長度

時間複雜度:

O( m+n ) 最長的長度就是每個節點交叉比大小,合併後的串列最後總長度為O(m+n)

空間複雜度:

O( m+n ) 最長的長度就是每個節點交叉比大小,遞迴stack最深所需空間為O(m+n)


關鍵知識點

關鍵在於,比較的時候,只要比較排頭即可,後續的比較都是依樣畫葫蘆,比較和合併模式是共通的。


Reference:

[1] Python/Go/Java/JS/C++ O( m + n ) simple recursion [w/ Comment] - Merge Two Sorted Lists - LeetCode

avatar-img
88會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給定一組輸入陣列,裡面每個參數分別代表矩陣的寬和高。 如果有兩個矩陣的寬/高的比例是相同的,代表這兩個矩陣是等比例的。 要求我們計算,等比例的矩陣pair總共有多少個?
題目會給定我們一個輸入陣列,要求我們計算好配對的數目有多少個? 好配對的定義: 兩個數字相同,但是陣列索引一個在前,一個在後。 nums[i] == nums[j] and i < j. 這樣 (i, j) 就稱為一組好配對。
題目會給定我們一個陣列和參數k,要求我們將陣列右旋k次,然後輸出內容。 例如[1,2,3,4,5] 右旋 2次,輸出就是[4,5,1,2,3]
題目會給定我們一個陣列,要求我們找出裡面統計最多出現次數的偶數 。 假如有兩個偶數出現的次數一樣多,取最數字比較小的那個最為答案。
題目會給定我們一個陣列,陣列長度為n。 要求我們找出裡面出現次數超過 n / 3次的數字。
題目會給定我們一個輸入陣列,裡面的字母A和字母B分別代表兩種顏色的卡片。 假如某張卡片的左右都是相同的,例如AAA,Alice可以抽掉中間那張A。 同樣的,假如某張卡片的左右都是相同的,例如BBB,Bob可以抽掉中間那張B。 請問Alice和Bob輪流玩抽卡遊戲, 請問最後是誰贏?
題目會給定一組輸入陣列,裡面每個參數分別代表矩陣的寬和高。 如果有兩個矩陣的寬/高的比例是相同的,代表這兩個矩陣是等比例的。 要求我們計算,等比例的矩陣pair總共有多少個?
題目會給定我們一個輸入陣列,要求我們計算好配對的數目有多少個? 好配對的定義: 兩個數字相同,但是陣列索引一個在前,一個在後。 nums[i] == nums[j] and i < j. 這樣 (i, j) 就稱為一組好配對。
題目會給定我們一個陣列和參數k,要求我們將陣列右旋k次,然後輸出內容。 例如[1,2,3,4,5] 右旋 2次,輸出就是[4,5,1,2,3]
題目會給定我們一個陣列,要求我們找出裡面統計最多出現次數的偶數 。 假如有兩個偶數出現的次數一樣多,取最數字比較小的那個最為答案。
題目會給定我們一個陣列,陣列長度為n。 要求我們找出裡面出現次數超過 n / 3次的數字。
題目會給定我們一個輸入陣列,裡面的字母A和字母B分別代表兩種顏色的卡片。 假如某張卡片的左右都是相同的,例如AAA,Alice可以抽掉中間那張A。 同樣的,假如某張卡片的左右都是相同的,例如BBB,Bob可以抽掉中間那張B。 請問Alice和Bob輪流玩抽卡遊戲, 請問最後是誰贏?
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
《光明與黑暗III》是1997年由SEGA推出的經典回合制策略遊戲。遊戲擁有多元化的角色設定和龐大的故事架構,讓玩家能夠從多個角度體驗與探索。即使在現今遊戲市場,這款經典之作依然值得每位玩家一試。
Thumbnail
每個時代都會有一些出色的音樂人得不到他們應該擁有的尊重和名聲,儘管為創作世上最偉大的音樂付出了大量的時間和精力,但要像披頭四和齊柏林飛船在鼎盛時期那樣俘獲大眾眼球和耳朵,卻又是另一回事,而 Michael Kamen 在經典搖滾樂迷心目中雖然看似陌生,但他的名字卻遍布過去半個世紀最偉大的歌曲之中。
Thumbnail
回顧了幾部令人印象深刻的經典日劇,包括1998年的「麻辣教師GTO」和2001年的「Hero」。無論是熱血的校園故事還是真實正義的追求,這些劇集都在我心中留下了不可磨滅的印記。
Thumbnail
題目敘述 題目會給定我們一條鏈結串列Linked list的起始節點,要求我們刪除Linked List正中央的節點。 註: 正中央的節點,題目定義為索引為floor( 串列長度 / 2 ) 的節點,索引從零(Head Node)出發開始數。 例如 1 -> 2 -> 3 -> 4 鏈結
Thumbnail
題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。
Thumbnail
《與成功有約》作者柯維被《時代》雜誌列為25位最有影響力的美國人之一。而《富比斯》也將其評為有史以來最具影響力的10大管理類書籍之一。 柯維在書中傳授的內容不是某種流行趨勢或管理技巧,而是不會因為環境變化而過時,能夠持續指導行為的基本原則,主張通過思維的改變達到行為的改變,是一個“從裡到外”的變化。
Thumbnail
在家找到多年前姪女送我的日文版《經典日劇主題曲》雙CD,只看過少部分劇集,其他是只聞其名,或看過幾集,不是人家不好,因自己從小是廣播迷,接近21世紀才開始在網絡串流平台實時追劇,算是追不上潮流的老古董。
Thumbnail
當「擁抱」成為傳遞情感的身體語言,雙手緊貼著另一人的後背,把頭靠在對方的肩上,也將自身的重量交付給對方,這正是《戀愛修課》第二季帶給我的感受,我們接收到角色們的狀態,那些欲言又止的惶恐、那些傾瀉而出的情感、那些藏不住的愛意。當我們意識到「自己不再是一個人」,有了朋友、有了男友之後,能否把最真實的自己
Thumbnail
「柳林中的風聲」是一本細細描寫大自然給孩子的書籍。讓孩子好好感受自然的書籍。 . 本書的起源這是一個小男孩每天晚上睡覺前,要爸爸講一個有關「鼴鼠和他的朋友們」的故事,然後伴著這些小動物的友誼和歡笑進入夢鄉。而講著講著,就形成一個精彩的大自然故事。這是西元1907年的事情了。對於2022年的孩子來
Thumbnail
介紹包括101求婚、魔女的條件、一個屋簷下、神啊!請多給我一點時間、熟男不結婚等15部經典日劇,及其劇中的歌曲與配樂,讓我們回到那些熟悉的劇情和歌曲,也回到自己也曾有過相同印記的回憶...
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
《光明與黑暗III》是1997年由SEGA推出的經典回合制策略遊戲。遊戲擁有多元化的角色設定和龐大的故事架構,讓玩家能夠從多個角度體驗與探索。即使在現今遊戲市場,這款經典之作依然值得每位玩家一試。
Thumbnail
每個時代都會有一些出色的音樂人得不到他們應該擁有的尊重和名聲,儘管為創作世上最偉大的音樂付出了大量的時間和精力,但要像披頭四和齊柏林飛船在鼎盛時期那樣俘獲大眾眼球和耳朵,卻又是另一回事,而 Michael Kamen 在經典搖滾樂迷心目中雖然看似陌生,但他的名字卻遍布過去半個世紀最偉大的歌曲之中。
Thumbnail
回顧了幾部令人印象深刻的經典日劇,包括1998年的「麻辣教師GTO」和2001年的「Hero」。無論是熱血的校園故事還是真實正義的追求,這些劇集都在我心中留下了不可磨滅的印記。
Thumbnail
題目敘述 題目會給定我們一條鏈結串列Linked list的起始節點,要求我們刪除Linked List正中央的節點。 註: 正中央的節點,題目定義為索引為floor( 串列長度 / 2 ) 的節點,索引從零(Head Node)出發開始數。 例如 1 -> 2 -> 3 -> 4 鏈結
Thumbnail
題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。
Thumbnail
《與成功有約》作者柯維被《時代》雜誌列為25位最有影響力的美國人之一。而《富比斯》也將其評為有史以來最具影響力的10大管理類書籍之一。 柯維在書中傳授的內容不是某種流行趨勢或管理技巧,而是不會因為環境變化而過時,能夠持續指導行為的基本原則,主張通過思維的改變達到行為的改變,是一個“從裡到外”的變化。
Thumbnail
在家找到多年前姪女送我的日文版《經典日劇主題曲》雙CD,只看過少部分劇集,其他是只聞其名,或看過幾集,不是人家不好,因自己從小是廣播迷,接近21世紀才開始在網絡串流平台實時追劇,算是追不上潮流的老古董。
Thumbnail
當「擁抱」成為傳遞情感的身體語言,雙手緊貼著另一人的後背,把頭靠在對方的肩上,也將自身的重量交付給對方,這正是《戀愛修課》第二季帶給我的感受,我們接收到角色們的狀態,那些欲言又止的惶恐、那些傾瀉而出的情感、那些藏不住的愛意。當我們意識到「自己不再是一個人」,有了朋友、有了男友之後,能否把最真實的自己
Thumbnail
「柳林中的風聲」是一本細細描寫大自然給孩子的書籍。讓孩子好好感受自然的書籍。 . 本書的起源這是一個小男孩每天晚上睡覺前,要爸爸講一個有關「鼴鼠和他的朋友們」的故事,然後伴著這些小動物的友誼和歡笑進入夢鄉。而講著講著,就形成一個精彩的大自然故事。這是西元1907年的事情了。對於2022年的孩子來
Thumbnail
介紹包括101求婚、魔女的條件、一個屋簷下、神啊!請多給我一點時間、熟男不結婚等15部經典日劇,及其劇中的歌曲與配樂,讓我們回到那些熟悉的劇情和歌曲,也回到自己也曾有過相同印記的回憶...