面试题56 - II. 数组中数字出现的次数 II

131 阅读1分钟

class Solution {
    public int singleNumber(int[] nums) {
        int[] arr = new int[32];
        for (int num : nums) {
            for (int i = 0; i < 32; i++) {
                arr[31 - i] += num & 1;
                num >>>= 1;
            }
        }
        int ans = 0, m = 3;
        for (int i = 0; i < 32; i++) {
            ans <<= 1;
            ans |= arr[i] % m;
        }
        return ans;
    }
}
  • 方法二状态机位运算
 public int singleNumber(int[] nums) {
        int ones = 0, twos = 0;
        for (int num : nums) {
            ones = ones ^ num & ~twos;
            twos = twos ^ num & ~ones;
        }
        return ones;
    }