题目
一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
数据范围:数组长度 2≤n≤1000,数组中每个数的大小 0<val≤1000000
要求:空间复杂度 O(1),时间复杂度 O(n)
思路
将数组里的每个元素出现的次数缓存起来,取出现一次的元素进行排序输出。
调用map.getOrDefault(Object key, V defaultValue)方法对上述思路进行优化。
题解
说明
不论什么方法,最好都要对参数进行必要的校验。增加严谨性
if(参数为空)//最好用封装好的工具类/或者自己封装的工具类。
throw new 自定义异常处理;
缓存法
public static void demo(int[] arr){
Map<Integer, Integer> map = new HashMap<>();//创建缓存
for(int i = 0; i < arr.length; i++){//给缓存里存储数据
if(!map.containsKey(arr[i]))
map.put(arr[i], 1);
else
map.put(arr[i], map.get(arr[i]) + 1);
}
//利用treeSet特性处理输出结果
TreeSet<Integer> res = new TreeSet<>();
for(int i : map.KeySet()) {
if(map.get(i) == 1) {
res.add(i);
}
}
res.forEach(System.out::println);
}
调用api
public static void demo(int[] arr){
Map<Integer, Integer> map = new HashMap<>();//创建缓存
for(int i = 0; i < arr.length; i++){//给缓存里存储数据
map.put(arr[i], map.getOrDefout(arr[i], 0) +1);
}
TreeSet<Integer> res = new TreeSet<>();
for(int i : map.KeySet()) {
if(map.get(i) == 1) {
res.add(i);
}
}
res.forEach(System.out::println);
}
说明:如有问题请大家批评指出
267

被折叠的 条评论
为什么被折叠?



