• 描述

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

 

  • 示例 1:
输入:nums = [3,4,3,3]
输出:4
示例 2:

输入:nums = [9,1,7,9,7,9,7]
输出:1
  • 限制:
1 <= nums.length <= 10000
1 <= nums[i] < 2^31
  • Solution One

HashCounter

class Solution {
    public int singleNumber(int[] nums) {
        int res = 0;
        Map<Integer,Integer> map = new HashMap<>();
        for(int i : nums){
            if(map.containsKey(i)){
                map.put(i,map.get(i) + 1);
            }else{
                map.put(i,1);
            }
        }
        for (Map.Entry<Integer,Integer> entry : map.entrySet()){
            if(entry.getValue() == 1){
                res = entry.getKey();
            }
        }
        return res;
    }
}
  • Solution Two

没看懂的写法

class Solution {
    public int singleNumber(int[] nums) {
        int a = 0,b =0;
        for(int i:nums){
            b = ~a&(b^i);
            a = ~b&(a^i);
        }
        return b;
    }
}