#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2020-05-08 17:07:35
# @Author  : raind (848299610@qq.com)
# @Link    : http://raind.cc
# @Version : $Id$

# 一个整型数组 nums 里除两个数字之外，其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)，空间复杂度是O(1)。

#  

# 示例 1：

# 输入：nums = [4,1,4,6]
# 输出：[1,6] 或 [6,1]
# 示例 2：

# 输入：nums = [1,2,10,4,1,4,3,3]
# 输出：[2,10] 或 [10,2]
#  

# 限制：

# 2 <= nums <= 10000

# 来源：力扣（LeetCode）
# 链接：https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof
# 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

from typing import List
class Solution:
    def singleNumbers(self, nums: List[int]) -> List[int]:
        res = []

        for i in nums:
            if i in res: res.remove(i)
            else: res.append(i)

        return res


class Solution:
    def singleNumbers(self, nums: List[int]) -> List[int]:
        counter = collections.Counter(nums)
        return [item[0] for item in counter.items() if item[1] == 1]



class Solution:
    def singleNumbers(self, nums: List[int]) -> List[int]:
        xor = 0
        num1, num2 = 0, 0
        for num in nums:
            xor ^= num
        mask = 1
        while xor & mask == 0:
            mask = mask << 1
        for num in nums:
            if num & mask == 0:
                num1 ^= num
            else:
                num2 ^= num
        return [num1, num2]

