260. Single Number III LeetCode

来源:互联网 发布:发改委大数据专项2016 编辑:程序博客网 时间:2024/05/12 11:59

题意:给出一个数组,数组中除了两个元素以外,其他元素都出现了两次,求这两个元素。
题解:把所有的元素异或起来。得到XOR,这个值实际就是要求的两个元素的异或,那么XOR的最右边的第一个1一定是这两个元素一个有的一个没有的,那么我们用这一位去区分这两个数,在异或一遍数组,如果数字的这一位上是1,异或到第一个数上,如果等于0,异或到第二个数上。

class Solution {public:    vector<int> singleNumber(vector<int>& nums) {        int Xor = 0;        int n = nums.size();        for(int i = 0; i < n; i++)            Xor ^= nums[i];        int lowbit = Xor & -Xor;        int one = 0, two = 0;        for(int i = 0; i < n; i++)        {            if(lowbit & nums[i])                one ^= nums[i];            else two ^= nums[i];        }        vector<int> v;        v.push_back(one);        v.push_back(two);        return v;    }};
0 0