这是力扣网站的一道题,挺巧妙的,分享给大家。
0x01. 题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
0x02. 示例
输入: [2,2,1]
输出: 1
输入: [4,1,2,1,2]
输出: 4
0x03. 答案
使用异或实现找数组里面只出现一次的数字。
int singleNumber(vector& nums) {
int single = 0;
for (int num : nums) {
single ^= num;
}
return single;
}
0x04. 关于异或
满足交换律,如:
a ^ c ^ b
a ^ b ^ c
任何数与0异或得任何数,如:
0 ^ n => n
相同的数异或为0,如:
n ^ n => 0
最后数组[4,1,2,1,2]异或分解:
4 ^ 1 ^ 2 ^ 1 ^ 2
=>
4 ^ 1 ^ 1 ^ 2 ^ 2
=>
4 ^ 0 ^ 0
=>
4
0x05. 关于更多
题目出处:
https://leetcode-cn.com/problems/single-number/
领取专属 10元无门槛券
私享最新 技术干货