136.只出现一次的数字
思路
首先想到了的是遍历依次去判断,或者使用set集合来处理,但是题目中提示能够不使用额外空间吗?
想了一会儿没想到有什么办法,看了下别人分享的解析,用到了位操作里的异或操作:
- 如果我们对 0 和二进制位做 XOR 运算,得到的仍然是这个二进制位
- a ^ 0 = a
- 如果我们对相同的二进制位做 XOR 运算,返回的结果是 0
- a ^ a = 0
- XOR 满足交换律和结合律
- a⊕b⊕a*=(a⊕a)⊕b=0⊕b=*b
将所有的数进行 XOR 操作,得到那个唯一的数字
class Solution {
public int singleNumber(int[] nums) {
int a = 0;
for (int i : nums) {
a ^= i;
}
return a;
}
}