# 只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

# 思路:

1 利用哈希表。

代码

    public int singleNumber1(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        for (Integer i : nums) {
            Integer count = map.get(i);
            count = count == null ? 1 : ++count;
            map.put(i, count);
        }
        for (Integer i : map.keySet()) {
            Integer count = map.get(i);
            if (count == 1) {
                return i;
            }
        }
        return -1;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

2 异或

    /**
     * a^b^b=a = b^a^b = a
     * 
     * @param nums
     * @return
     */
    public static int singleNumber(int[] nums) {
        int si = 0;
        for (int i : nums) {
            si ^= i;
        }
        return si;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13