题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
- 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 :
输入: [2,2,1]
输出: 1
位运算
这是主要是运用到了 按位异或 ^
的性质。
异或:
- 相同的位(1 1 或 0 0)
^
运算结果为 0 - 不相同的位(1 0 或 0 1)
^
运算结果为1
由上边推出的结论:
相同
的两个数字进行异或(位都相同),结果为 0- 数字和 0 异或,结果为数字本身(0 的所有位都是
0
)
class Solution {
public int singleNumber(int[] nums) {
int ans = 0;
// 出现两次的数字都被异或成了 0,最后剩下的就是那个出现一次的数字
for(int num:nums){
ans ^= num;
}
return ans;
}
}