版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/maotianyi941005/article/details/85080895
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