题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
import java.util.*;
//给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。[1,1,2,2,3]
public class Main {
public static void main(String[] args) {
System.out.println(singleNumber2(new int[]{4, 1, 2, 2, 1}));
}
//方法一:使用HashMap来做
public static int singleNumber(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<>();
int count = 0;
//遍历该数组
for (int num : nums) {
//将该数组中的值作为map集合中的键,如果map中没有该值则添加
//map中没有该键
if (!map.containsKey(num)) {
count = 1;
System.out.println(map);
map.put(num, count);
} else {
count = count +1;
map.put(num, count);
}
}
Set<Integer> set = map.keySet();
for (Integer key : set) {
if (map.get(key) == 1) {
return key;
}
}
return -1;//没有该值
}
//使用异或运算来得到该值
//任何数和 0 做异或 结果仍然是原来的数,即 a^0 = a
//任何数和自身做 异或运算,记过是0, 即 a^a=0
//异或运算满足交换律和结合律,即 a^b^a = b^(a^a) = b^0=b
public static int singleNumber2(int[] nums) {
int singNum = 0;
for (int num : nums) {
singNum ^= num;
}
return singNum;
}
}