题目:136.只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现 线性时间复杂度 的算法来解决此问题,且该算法只使用 常量额外空间。
- 示例 1:
输入:nums = [2,2,1]
输出:1
- 示例 2:
输入:nums = [4,1,2,1,2]
输出:4
- 示例 3:
输入:nums = [1]
输出:1
- 提示:
1 <= nums.length <= 3 * 10^4
-3 * 10^4 <= nums[i] <= 3 * 10^4
除了某个元素只出现一次以外,其余每个元素均出现两次。
思路
可以使用 异或运算(XOR)来解决这个问题。因为异或运算满足以下特性:
a ^ a = 0(任何数和自己异或结果为0)。a ^ 0 = a(任何数和0异或结果为自己)。- 异或运算满足交换律和结合律,即
(a ^ b) ^ c = a ^ (b ^ c)。
因此,对于出现两次的元素,它们相互异或的结果是 0,只有那个出现一次的元素会最终保留下来。
- 时间复杂度:O(n)
- 空间复杂度:O(1)
代码
public int singleNumber(int[] nums) {
int result = 0;
for (int num : nums) {
// 将所有元素进行异或运算
result ^= num;
}
return result;
}