【python3】leetcode 136. Single Number (easy)
阿新 • • 發佈:2018-12-19
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
1 沒考慮線性時間和without using extra memory
class Solution: def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ count = collections.Counter(nums) for k in count.keys(): if count[k] == 1: return k
Runtime: 40 ms, faster than 99.17% of Python3
2 記錄一個solution利用異或的解法
時間O(n),空間O(1)
Concept
- If we take XOR of zero and some bit, it will return that bit
- a⊕0 = a⊕0=a
- If we take XOR of two same bits, it will return 0
- a⊕ a = a⊕a=0
- a⊕b ⊕ a = (a ⊕ a) ⊕b = 0 ⊕ b = b
So we can XOR all bits together to find the unique number.
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
a = 0
for i in nums:
a ^= i
return a