给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
具体代码实现如下:
class Solution {
public int singleNumber(int[] nums) {
int single = 0;
for(int n : nums){
// 异或:同为0,不同为1,0为任何数异或均为任何数
single ^= n;
}
return single;
/*
Map<Integer, Integer> hm = new HashMap<>();
for(int n : nums){
if(hm.containsKey(n)){
hm.put(n, 2);
}else{
hm.put(n, 1);
}
}
int res = 0;
for(int n : nums){
if(hm.get(n) == 1){
res = n;
break;
}
}
return res;
*/
}
}
人生若只如初见,何事秋风悲画扇。
等闲变却故人心,却道故人心易变。
-----------纳兰性德
小白寄语:学如逆水行舟,不进则退。