publicclassSolution{publicintsingleNumber(int[] nums){int result =0;for(int num : nums){
result ^= num;// 对数组中的每个元素进行异或操作}return result;// 最终结果就是只出现一次的元素}}
方法二 哈希表,不满足线性时间复杂度
importjava.util.HashMap;publicclassSolution{publicintsingleNumber(int[] nums){// 创建一个哈希表HashMap<Integer,Integer> map =newHashMap<>();// 遍历数组,统计每个数字出现的次数for(int num : nums){
map.put(num, map.getOrDefault(num,0)+1);}// 遍历哈希表,找出只出现一次的数字for(int num : map.keySet()){if(map.get(num)==1){return num;}}// 如果没有找到(理论上不会发生),返回 -1 或其他特殊值return-1;}}
方法三 集合 不满足线性时间复杂度
importjava.util.HashSet;publicclassSolution{publicintsingleNumber(int[] nums){// 创建一个空的哈希集合HashSet<Integer> set =newHashSet<>();// 遍历数组中的每个数字for(int num : nums){// 如果集合中没有该数字,则加入集合if(!set.contains(num)){
set.add(num);}else{// 如果集合中已经有该数字,则删除它
set.remove(num);}}// 最后集合中只会剩下那个只出现一次的数字return set.iterator().next();// 获取集合中的第一个元素}}
方法四 元素之和 不满足线性时间复杂度
importjava.util.HashSet;publicclassSolution{publicintsingleNumber(int[] nums){// 创建一个哈希集合HashSet<Integer> set =newHashSet<>();// 计算数组的元素之和int sumArray =0;// 将数组中的元素添加到集合,并计算数组元素的总和for(int num : nums){
set.add(num);
sumArray += num;}// 计算集合中所有元素的和int sumSet =0;for(int num : set){
sumSet += num;}// 使用数学公式计算只出现一次的数字return2* sumSet - sumArray;}}