给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
思路:
使用异或操作去除相同的数字。
异或(XOR)操作是一种位运算,它的特点是当两个操作数的对应位不相同时返回1,相同时返回0。异或操作有一个重要的性质,即相同的数字经过异或操作后会得到0,而不同的数字异或后会得到一个非零的结果。
这个性质解释了为什么异或操作可以用于去除重复的数。当你对一个数组中的所有元素依次进行异或操作,重复的元素会在异或过程中互相抵消,最终得到的结果就是只出现一次的元素。
class Solution {
public int singleNumber(int[] nums) {
int single = 0;
for(int num:nums) {
single ^= num;
}
return single;
}
}