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

LeetCode 136: Single Number

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

基本資料
#

難易度: easy 第一次嘗試:2022-08-16

  • 提交紀錄:Accepted ×3

解題思路
#

XOR 有交換律和結合律,而且 x ^ x = 0、x ^ 0 = x(Bit Manipulation)。把所有數 XOR 起來,出現兩次的兩兩抵消成 0,最後剩下只出現一次的數。O(1) 額外空間。

我的解法
#

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        res = 0
        for x in nums:
            res ^= x
        return res

複雜度
#

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

要特別避免的錯誤
#

  • 用雜湊表計數也可以,但題目要求 O(1) 空間。

面試口說整理
#

XOR 有交換律,相同的數 XOR 會變成 0,所以我把所有數 XOR 起來,出現兩次的都抵消了,剩下的就是答案。時間 O(n)、空間 O(1)。

相關文章

LeetCode 118: Pascal's Triangle
·1 分鐘
LeetCode Easy Array Dynamic-Programming
LeetCode 118 解題筆記:每一列頭尾是 1,中間每一格是上一列左上和正上方的和
LeetCode 108: Convert Sorted Array to Binary Search Tree
·1 分鐘
LeetCode Easy Array Divide-and-Conquer Tree Binary-Search-Tree
LeetCode 108 解題筆記:中間的元素當根,左右兩半遞迴;左右大小最多差 1,自然是平衡的
LeetCode 119: Pascal's Triangle II
·1 分鐘
LeetCode Easy Array Dynamic-Programming
LeetCode 119 解題筆記:只要第 rowIndex 列,用一維陣列從右往左更新,空間 O(k)
LeetCode 27: Remove Element
·1 分鐘
LeetCode Easy Array Two-Pointers
LeetCode 27 解題筆記:寫入指標只寫不等於 val 的數,最後回傳寫入的個數
LeetCode 35: Search Insert Position
·1 分鐘
LeetCode Easy Array Binary-Search
LeetCode 35 解題筆記:找第一個 >= target 的位置(lower bound);半開區間 [l, r) 要配 r = mid,不能寫 r = mid - 1
LeetCode 66: Plus One
·1 分鐘
LeetCode Easy Array Math
LeetCode 66 解題筆記:從最後一位往前加一,遇到 9 變 0 繼續進位,全部都是 9 時前面補 1