​原题链接​

不要自卑,去提升实力
互联网行业谁技术牛谁是爹
如果文章可以带给你能量,那是最好的事!请相信自己
加油o~

136.只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

解题思路:

方法1:利用位运算符比较强大
利用异或运算法
性质(1):0与任何数异或都得另外的那个数
性质(2):1异或任何数=任何数取反
性质(3):满足交换律和结合律
1 xor 2 xor 3 xor 2 = (1 xor 1) xor (2 xor 2) xor 3 = 0 xor 0 xor 3 = 0 xor 3 = 3
性质(4):判断两个数是否相等可以用a异或b==0
性质(5):交换两个数可以
a=a异或b
b=b异或a
a=a异或b

方法2:
因为每个元素最多出现两次,可以利用set特性
当添加重复元素时,第二次会添加失败,说明set中已有相同元素,所以调用方法删除它
最后利用迭代器返回集合中第一个即为答案

代码:
方法1:

/**
*作者:魏宝航
*2020年11月25日,上午8:51
*/
class Solution {
public int singleNumber(int[] nums) {
int res=0;
for(int i:nums){
res^=i;
}
return res;
}
}

方法2:

/**
*作者:魏宝航
*2020年11月25日,上午8:34
*/
class Solution {
public int singleNumber(int[] nums) {
Set<Integer> set=new HashSet<>();
for(int i:nums){
if(set.add(i)){

}
else{
set.remove(i);
}
}
return set.iterator().next();
}
}

执行结果: