0136. Single Number - chasel2361/leetcode GitHub Wiki
Given a non-empty array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input: [2,2,1]
Output: 1
Example 2:
Input: [4,1,2,1,2]
Output: 4
這個問題如果要硬解的話,可以利用 dict 紀錄每個數出現的次數,最後回傳只出現一次的數,但如果利用 Bitwise Operation 的話可以更快速,且更省空間的解出答案
可以到這邊稍微回憶一下 XOR 的運算。額外要補充的部分是 XOR 結合率跟交換率的性質,所有的數都可以進行 XOR 運算,由於 XOR 必須前後僅一為真才回傳真,所以遇到重複的數就會回傳 0 ,又因為有交換率和結合率,運算的先後順序不影響計算結果,如此一來,最後的計算結果就會是唯一不重複的數。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
res = nums[0]
for i in range(1, len(nums)):
res ^= nums[i]
return res
這個寫法的時間複雜度是 O(N) ,空間複雜度是 O(1)
其實這個方法檢查的是"有哪一個數出現次數為奇數",只是因為題目有限制出現次數最多為二,所以剛好可以適用。