314,只出现一次的数字 III

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。

示例 :

输入:[1,2,1,3,2,5]
输出:[3,5]

答案:

 1public int[] singleNumber(int[] nums) {
2    int diff = 0;
3    for (int num : nums) {
4        diff ^= num;
5    }
6    diff &= -diff;
7    int[] rets = {0, 0};
8    for (int num : nums) {
9        if ((num & diff) == 0) {
10            rets[0] ^= num;
11        } else {
12            rets[1] ^= num;
13        }
14    }
15    return rets;
16}

解析:

之前我们讲过140,只出现一次的数字272,只出现一次的数字 II,这题解法也比较多,这里只列出了这一种解法,如果想了解更多,可以参照前面两道题的解法。题目说了只有两个数出现了一次,其他的都出现了2次,我们把所有值都异或一遍,异或的结果就是那两个只出现一次的异或值,因为出现两次的异或结果都为0。因为这两个值不相同,所以他们的异或结果肯定不为0,也就是说这个结果转化为二进制的某一位上肯定有1,我们就根据这个1可以把数组分为两个部分,并且这两个只出现一次的肯定不会在同一组,根据这个特性我们很容易就能找到这两个值。

上一篇:统计一个数组中好对子的数目


下一篇:axios请求