Description:
Given an array of numbers nums
, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.
For example:
Given nums = [1, 2, 1, 3, 2, 5]
, return [3, 5]
.
Note:
- The order of the result is not important. So in the above example,
[5, 3]
is also correct. - Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
在线性时间复杂度下,找到两个只出现一次的元素。结果没有先后顺序。
既然是只出现一次且不考虑顺序,那么就可以机智的使用set的无序不可重复的特性。
public class Solution { public int[] singleNumber(int[] nums) { Set<Integer> set = new HashSet<Integer>(); for(int i : nums) { if(!set.add(i)) { set.remove(i); } } int[] res = new int[2]; int i = 0; for(int e : set) { res[i++] = e; } return res; } }