采用异或的解法:
java中异或表示为^
异或
1. 满足交换律:A^B = B^A
2. 满足结合律:(A^B)^C = A^(B^C)
3. 0^A = A
4. A^A = 0
奇数个数字,最后只剩那单个数字
class solution {
public int singleNumber(int[] nums){
int num=0;
for (int i=0;i<nums.length;i++){
num=num^nums[i];
}
return num;
}
}
升级: 除了一个元素出现一次外,其余均出现三次
hashMap方法
class solution{
public int singleNumber(int[] nums){
HashMap<Integer,Boolean> map=new HashMap<>();
for(int num:nums){
if(map.containsKey(num)){
map.put(num,true);
else{
map.put(num,false);
}
}
Set<Integer> set=map.keySet();
for (int num:set){
if(map.get(num)==false){
return num