1,问题简述
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。
找出只出现一次的那两个元素。
2,示例
示例 : 输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。 你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?3,题解思路
本题不使用常量数空间来做,基本满足题解的正确性,所以使用了键值对集合的hashMap来做了,不过空间复杂度比较高嘛
4,题解程序
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.IntStream; public class SingleNumberTest3 { public static void main(String[] args) { int[] nums = {1, 2, 1, 3, 2, 5}; int[] singleNumber = singleNumber(nums); for (int num : singleNumber ) { System.out.print(num + "\t"); } } public static int[] singleNumber(int[] nums) { if (nums == null || nums.length == 0) { return new int[0]; } HashMap<Integer, Integer> hashMap = new HashMap<>(nums.length); for (int num : nums ) { hashMap.put(num, hashMap.getOrDefault(num, 0) + 1); } List<Map.Entry<Integer, Integer>> entryList = hashMap.entrySet().stream().filter(x -> x.getValue() == 1) .collect(Collectors.toList()); int[] result = new int[2]; IntStream.range(0, entryList.size()).forEachOrdered(i -> result[i] = entryList.get(i).getKey()); return result; } }5,题解程序图片版
6,总结
目前也说,使用键值对集合hashMap做的题也不少,可见键值对集合在我们的应用中使用的频率非常高,这也是为什么要去懂它的元音之一吧,这里就不过多介绍这个集合了,有需要的话可以自己查阅一下资料自己看看吧,这不是我们最近要重点强调的内容