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

LeetCode 2540: Minimum Common Value

·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(一次通過)

解題思路
#

兩個陣列都已排序。兩邊各一個指針,從小開始比:

  • 相等:這就是最小的共同值,直接回傳。
  • 不相等:比較小的那個不可能出現在另一個陣列裡更後面的位置(後面只會更大),所以把比較小的那邊往前。

我的解法
#

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

原本的版本在往前移之前,先檢查「是不是已經是最後一個」,是的話就 break。其實不需要:移到結尾之後,while 的條件就會讓迴圈停下來。

複雜度
#

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

要特別避免的錯誤
#

  • 把比較大的那邊往前:會跳過答案。
  • 用 set 取交集再取最小值:可以,但空間 O(n),也沒用到排序的條件。

面試口說整理
#

兩個陣列都排好序,所以我用兩個指針從頭比。相等就是最小的共同值;不相等時,比較小的那個在另一邊也找不到了,所以把它那邊往前。任一邊走完還沒找到就回傳 -1,時間 O(n + m)、空間 O(1)。

相關文章

LeetCode 2570: Merge Two 2D Arrays by Summing Values
·1 分鐘
LeetCode Easy Two-Pointers Array
LeetCode 2570 解題筆記:兩個依 id 排序的陣列,用合併兩個有序序列的雙指針,id 相同就相加
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 相交(&)取兩邊次數的較小值