只出现一次的数字(简单)
2020年5月15日
题目来源:力扣
解题
看到题目,第一个想法就是用HashMap记录元素个数,最后遍历找出只出现一次的key值。
这样做开辟额外的空间,与题意不符。
class Solution {
public int singleNumber(int[] nums) {
Map<Integer,Integer> map=new HashMap();
for(int a:nums){
if(map.containsKey(a)){
int value=map.get(a);
map.put(a, value+1);
}
else{
map.put(a, 1);
}
}
for(Map.Entry<Integer, Integer>entry:map.entrySet()){
if(entry.getValue()==1) return entry.getKey();
}
return 0;
}
}
进阶做法,用异或的原理——相同为0,不同为1,两个相同的数异或会变成0,那么遍历整个数组拿所有数进行异或,最后就会剩下一个只出现一次的数字了。
妙阿!位运算真香
class Solution {
public int singleNumber(int[] nums) {
int a=nums[0];
for(int i=1;i<nums.length;i++){
a^=nums[i];
}
return a;
}
}