剑指offer 40.数组中只出现一次的数字

剑指offer 40.数组中只出现一次的数字

题目

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

思路

如果只有一个数,当然是异或更好用,相同数字异或为0,但是有两个数字,这种方法无法快速找到,所以不如用hashset,如果存在就删除,不存在就加入,最后把两个数字取出来即可。

代码

  public void FindNumsAppearOnce(int[] array, int num1[], int num2[]) {

    HashSet<Integer> set = new HashSet<>();

    for (int i : array) {
      if (set.contains(i)) {
        set.remove(i);
      } else {
        set.add(i);
      }
    }
    int[] t = new int[2];
    int temp = 0;
    Iterator<Integer> iterator = set.iterator();
    while (iterator.hasNext()) {
      t[temp++] = iterator.next();
    }
    num1[0] = t[0];
    num2[0] = t[1];
  }
原文地址:https://www.cnblogs.com/blogxjc/p/12416163.html