给你一个 非空整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
做这道题之前,我们先简单的了解下异或运算。
所谓异或运算就是任何数都可以和0进行异或运算,相同为0,不相同则为数本身,如下图代码。
给一个数组[2,2,1]
System.out.println(0 ^ 2); //2
System.out.println(2 ^ 2); //0
System.out.println(0 ^ 1); //1
这道题是要找到一个数组中的只出现一次的,那么我们可以定义一个变量0,对数组进行遍历,然后对其依次进行异或运算 ,如果数组中有出现两次的数,那么异或结果必为0,最后异或出的结果就是出现一次的数。
public static int singleNumber(int[] nums) {
int number=0;
for (int i = 0; i < nums.length; i++) {
number=number ^ nums[i];
}
return number;
}