题目描述:

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

说明:

你的算法应该具有线性时间复杂度。你可以不使用额外空间来实现吗?

示例 1:

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

示例 2:

输入: [4,1,2,1,2]
输出: 4

题目分析:

这道题,我们可以使用位运算的两个公式解决。第一个公式是 ​​A ^ A = 0​​​ ,第二个公式是 ​​A ^ 0 = A​​​ 。所以,只要利用这两个公式,把数组内的所有数字都进行按位异或操作,我们就能得到只出现一次的数字。因为出现两次的所有数字按位异或的结果是 ​​0​​​ , ​​0​​​ 又与出现一次的数字按位异或就可以得到这个数字本身。例如,数组 ​​[4,1,2,1,2]​​​ , ​​4 ^ 1 ^ 2 ^ 1 ^ 2 = 4 ^ (1 ^ 1) ^ (2 ^ 2) = 4 ^ 0 = 4​​ 。

题解:

执行用时: 1 ms

内存消耗: 38.5 MB

class Solution {
public int singleNumber(int[] nums) {
// 结果
int res = 0;
// 讲数组中的每个数和 res 进行异或
for (int num : nums) {
res ^= num;
}
// 返回结果
return res;
}
}

题目来源:力扣(LeetCode)