您的位置:首页 > 其它

LeetCode(260) Single Number III

2015-08-29 18:30 302 查看
参考https://leetcode.com/discuss/52757/16ms-c-solution

结论:异或相同的数两次等于本身,即相同的数产生的异或作用会被抵消
大概的思路:

1、make a filter

2、取出相应位不为0的数

3、再算出另一个数

[code]class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        //make a filter
        int xory = 0;
        for(int i = 0; i < nums.size(); i++)
            xory ^= nums[i];
        int lowestBit = xory & (~(xory - 1));
        //fetch the one whose certain bit is not 0 
        int x = 0;
        for(int i = 0; i < nums.size(); i++) 
            if(nums[i] & lowestBit)
                x ^= nums[i];

        int y = xory ^ x;

        vector<int> result;
        result.push_back(x);
        result.push_back(y);

        return result;

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