剑指offer 数组中只出现一次的数字

来源:互联网 发布:概率和影响矩阵 编辑:程序博客网 时间:2024/05/16 23:49

题目描述

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

/**     * 任何一个数异或它自己都等于0     * 依次异或数组每一个数字,结果就是2个只出现一次的数字的异或结果x,异或结果肯定不为0     * 找到x二进制表示中第一个1的位置index     * 把index = 1的数字分为一组     * 把index = 0的数字分为一组     * 2个只出现一次的数字分在了不同的数组中     *     * @param array     * @param num1     * @param num2     */    public void FindNumsAppearOnce(int[] array, int num1[], int num2[]) {        if (array == null || array.length < 2) {            num1[0] = num2[0] = 0;            return;        }        int len = array.length;        int index;        int x = 0;        for (int i = 0; i < len; ++i) {            x ^= array[i];        }        for (index = 0; index < 32; ++index) {            if ((x & (1 << index)) != 0) {                break;            }        }        for (int i = 0; i < len; i++) {            if ((array[i] & (1 << index)) != 0) {                num1[0] ^= array[i];            } else {                num2[0] ^= array[i];            }        }    }
0 0