↓快轉到主要內容
  1. LeetCode/

LeetCode 2570: Merge Two 2D Arrays by Summing Values

·1 分鐘· ·
LeetCode Easy Two-Pointers Array
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2026-01-31

  • 提交紀錄:Accepted(一次通過)

解題思路
#

兩個陣列都已經依 id 排好序,而且各自的 id 不重複。就是合併兩個有序序列(跟 LC 88 一樣),只是 id 相同時要把值相加:

  • id 相同:輸出 [id, 兩邊的值相加],兩個指針都往前。
  • 不同:輸出 id 比較小的那個,那個指針往前。
  • 其中一邊用完後,另一邊剩下的直接接上。

我的解法
#

class Solution:
    def mergeArrays(self, nums1: List[List[int]], nums2: List[List[int]]) -> List[List[int]]:
        i = j = 0
        res = []
        while i < len(nums1) and j < len(nums2):
            if nums1[i][0] == nums2[j][0]:
                res.append([nums1[i][0], nums1[i][1] + nums2[j][1]])
                i += 1
                j += 1
            elif nums1[i][0] < nums2[j][0]:
                res.append(nums1[i])
                i += 1
            else:
                res.append(nums2[j])
                j += 1
        return res + nums1[i:] + nums2[j:]

原本的版本把「其中一邊用完」的情況也寫在同一個 while 裡(while i < n or j < m,裡面再分三種情況)。改成兩邊都有剩才進迴圈,結束後直接接上剩下的部分,比較短。

複雜度
#

時間 O(n + m),空間 O(n + m)。

要特別避免的錯誤
#

  • 用 dict 收集再排序:可以,但沒用到「已經排好序」的條件,多了 O(k log k)。
  • 迴圈結束後忘記接上剩下的部分。

面試口說整理
#

兩個陣列都依 id 排序,所以我用兩個指針合併:id 相同就把值相加、兩邊都前進;不同就輸出比較小的那個並前進。其中一邊用完後,另一邊剩下的直接接上。時間 O(n + m)。

相關文章

LeetCode 2540: Minimum Common Value
·1 分鐘
LeetCode Easy Two-Pointers Array
LeetCode 2540 解題筆記:兩個排序好的陣列各一個指針,比較小的那邊往前,第一次相等就是答案
LeetCode 2200: Find All K-Distant Indices in an Array
·1 分鐘
LeetCode Easy Two-Pointers Array
LeetCode 2200 解題筆記:每個 key 往左右各延伸 k 格,用一個指針記住已經輸出到哪裡,避免重疊的區間重複輸出
LeetCode 3069: Distribute Elements Into Two Arrays I
·1 分鐘
LeetCode Easy Array Two-Pointers Simulation
LeetCode 3069 解題筆記:照規則模擬:前兩個各放一邊,之後比較兩個陣列的最後一個,放到最後一個比較大的那邊
LeetCode 942: DI String Match
·1 分鐘
LeetCode Easy Array Two-Pointers String Greedy
LeetCode 942 解題筆記:兩個指標分別指向還沒用的最小值和最大值,遇到 I 放最小、遇到 D 放最大
LeetCode 349: Intersection of Two Arrays
·1 分鐘
LeetCode Easy Array Hash-Table Two-Pointers Binary-Search
LeetCode 349 解題筆記:兩個陣列各轉成集合取交集
LeetCode 350: Intersection of Two Arrays II
·1 分鐘
LeetCode Easy Array Hash-Table Two-Pointers Binary-Search
LeetCode 350 解題筆記:保留重複次數的交集,Counter 相交(&)取兩邊次數的較小值