# 【leetcode】Single Number III

Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.

For example:

Given nums = [1, 2, 1, 3, 2, 5], return [3, 5].

Note:

1. The order of the result is not important. So in the above example, [5, 3] is also correct.
2. Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int AxorB = 0;
for (vector<int>::iterator it = nums.begin(); it != nums.end(); ++it)
{
AxorB = AxorB ^ (*it);
}

int A = 0;
int B = 0;
int mask = AxorB & (-AxorB);
for (vector<int>::iterator it = nums.begin(); it != nums.end(); ++it)
{
if ((mask & (*it)) == 0)
A = A ^ (*it);
else
B = B ^ (*it);
}

vector<int> result;
result.push_back(A);
result.push_back(B);
return result;
}
};

Personal Note：

1. n & (-n)表示取的n中的最后一位二进制位
2. &的优先级小于==的优先级

• 本文已收录于以下专栏：

举报原因： 您举报文章：【leetcode】Single Number III 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)