数组中只出现过一次的数

来源:互联网 发布:淘宝连接热敏打印机 编辑:程序博客网 时间:2024/04/28 10:29

1.一个整型数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。

思路:对数组所有数求亦或和,最终答案就是这个数

2.一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

思路:对数组所有数求亦或和,会得到要求的两数的亦或和ans。假设ans二进制的第i位为1,则说明所求的两个数这一位不同。此时将所有第i位为1的数与ans亦或得到ans1,将所有第i位为0的数与ans亦或得到ans2,则得出答案。

class Solution {public:    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {int n = data.size();        int ans = 0;        for(int i = 0; i < n; i++) {            ans ^= data[i];        }        int x = ans;        int cnt = 0;        while (x) {           cnt++;            if (x % 2) {                break;            }            x /= 2;        }        int ans1 = ans, ans2 = ans;        for (int i = 0; i < n; i++) {            if (data[i] ^ (1 << cnt)) ans1 ^= data[i];            else ans2 ^= data[i];        }        *num1 = ans1, *num2 = ans2;    }};

0 0
原创粉丝点击