136. 只出现一次的数字

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。


思路:
  使用异或操作去除相同的数字。
  异或(XOR)操作是一种位运算,它的特点是当两个操作数的对应位不相同时返回1,相同时返回0。异或操作有一个重要的性质,即相同的数字经过异或操作后会得到0,而不同的数字异或后会得到一个非零的结果。
  这个性质解释了为什么异或操作可以用于去除重复的数。当你对一个数组中的所有元素依次进行异或操作,重复的元素会在异或过程中互相抵消,最终得到的结果就是只出现一次的元素。

class Solution {
    public int singleNumber(int[] nums) {
        int single = 0;
        for(int num:nums) {
            single ^= num;
        }
        return single;
    }
}

你可能感兴趣的:(算法,数据结构)