数组中只出现一次的数字

来源:互联网 发布:macbook卸载windows 编辑:程序博客网 时间:2024/06/06 02:30

class Solution {public:    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {        *num1 = *num2 = 0;        if (data.size() < 2)            return;        int s = 0;        for (int i = 0; i < data.size(); ++i)        {            s ^= data[i];        }        int t;        for (t = 0; t < 32; ++t)            if (s & (1<<t))                break;        for (int i = 0; i < data.size(); ++i)        {            if (data[i] & (1<<t))                *num1 ^= data[i];            else                *num2 ^= data[i];        }    }};

题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
异或的用法:
首先假设在数组中只出现一次的是a和b,那么只要把所有的数异或一次就能得到c=a^b(两个相同的数的异或值为0)由于a!=b所以c中至少有一位为1,所以就选一个为1的位把数组分成两组,那么a和b各占一组,再在各个组中用异或运算就能得到a和b的值了

0 0
原创粉丝点击