您的位置:首页 > 其它

LeetCode:Single Number III

2016-02-28 15:49 232 查看
problem:

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:

The order of the result is not important. So in the above example,
[5, 3]
is also correct.

Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?

Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

Solution:Bit Manipulation

class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {

int AxorB=0;
for(int i=0;i<nums.size();i++)
{
AxorB^=nums[i];
}

//取最后一个二进制位  根据区别位将vector中的数分为两个序列
int mask=AxorB&(~(AxorB-1));
int A=0,B=0;

for(int i=0;i<nums.size();i++)
{
if(mask&nums[i])
A^=nums[i];
else
B^=nums[i];

}
return vector<int>({A,B});
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: