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

LeetCode 1826: Faulty Sensor

·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-04-05

  • 提交紀錄:Wrong Answer ×2 → Accepted

解題思路
#

壞掉的感測器會掉一筆資料,後面的資料往左移一格,最後一格補上一個隨機值(保證不等於被掉的值)。最多只有一個感測器壞掉。

找到第一個 sensor1[i] != sensor2[i] 的位置 i:

  • 如果 sensor2 壞掉:sensor2 掉了 sensor1[i],所以 sensor2[i:-1] 應該等於 sensor1[i+1:]。
  • 如果 sensor1 壞掉:同理,sensor1[i:-1] 應該等於 sensor2[i+1:]。

只有一種成立才能確定是哪個;兩種都成立、或都不成立時無法判斷,回傳 -1。完全沒有不同的位置也回傳 -1。

我的嘗試
#

  1. 第一版只比對了下一個元素:sensor1[i + 1] == sensor2[i] 就判定 sensor2 壞掉。
  2. 第二版改成比對整段剩下的資料,但還是沒有處理兩種情況都成立的歧義。

兩版都會在這個例子出錯:sensor1 = [3, 3, 2, 3]、sensor2 = [3, 2, 3, 2]。sensor2 可能是掉了第二個 3(最後補 2),sensor1 也可能是掉了 sensor2 的第一個 2(最後補 3),兩種都說得通,答案是 -1;這兩版都回傳 2。

正確解法
#

class Solution:
    def badSensor(self, sensor1: List[int], sensor2: List[int]) -> int:
        n = len(sensor1)
        for i in range(n - 1):
            if sensor1[i] != sensor2[i]:
                sensor2_bad = sensor1[i + 1:] == sensor2[i:-1]
                sensor1_bad = sensor2[i + 1:] == sensor1[i:-1]
                if sensor1_bad == sensor2_bad:
                    return -1
                return 1 if sensor1_bad else 2
        return -1

迴圈只跑到 n - 2:如果只有最後一個位置不同,那只是補上的隨機值,無法判斷是哪個感測器壞掉。

複雜度
#

時間 O(n),空間 O(n)(切片會複製)。

要特別避免的錯誤
#

  • 只比對下一個元素就下結論。
  • 沒有處理兩種情況都成立的歧義。

面試口說整理
#

我找到第一個不同的位置 i,分別假設 sensor1 或 sensor2 壞掉:如果 sensor2 壞了,它從 i 開始的資料應該等於 sensor1 從 i + 1 開始的資料,最後一格不算;sensor1 壞了同理。只有一種成立才能判斷,兩種都成立或都不成立就回傳 -1。時間 O(n)。

相關文章

LeetCode 2200: Find All K-Distant Indices in an Array
·1 分鐘
LeetCode Easy Two-Pointers Array
LeetCode 2200 解題筆記:每個 key 往左右各延伸 k 格,用一個指針記住已經輸出到哪裡,避免重疊的區間重複輸出
LeetCode 1089: Duplicate Zeros
·1 分鐘
LeetCode Easy Array Two-Pointers
LeetCode 1089 解題筆記:先數有幾個 0 決定每個數要往後移幾格,再從後往前搬,遇到 0 時把複製的那個 0 也寫進去
LeetCode 977: Squares of a Sorted Array
·1 分鐘
LeetCode Easy Array Two-Pointers Sorting
LeetCode 977 解題筆記:平方後最大的一定在兩端,左右指針比較兩端的平方,大的從結果的最後面往前填
LeetCode 905: Sort Array By Parity
·1 分鐘
LeetCode Easy Array Two-Pointers Sorting
LeetCode 905 解題筆記:寫入指標把偶數交換到前面,跟 move zeroes 一樣
LeetCode 922: Sort Array By Parity II
·1 分鐘
LeetCode Easy Array Two-Pointers Sorting
LeetCode 922 解題筆記:偶數位置的指標 i、奇數位置的指標 j,各自跳兩格;i 放錯(奇數)時讓 j 找到放錯的偶數再交換
LeetCode 821: Shortest Distance to a Character
·1 分鐘
LeetCode Easy Array Two-Pointers String
LeetCode 821 解題筆記:左往右掃一次記錄到左邊最近的 c 的距離,右往左再掃一次取較小值