Skip to content

Files

Latest commit

2a95426 · Oct 8, 2018

History

History

137.Single Number II

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Oct 8, 2018
Oct 8, 2018
Oct 8, 2018

只出现一次的数字 II

题目描述

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

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,3,2]
输出: 3

示例 2:

输入: [0,1,0,1,0,1,99]
输出: 99

解法

遍历数组元素,对于每一个元素,获得二进制位(0/1),累加到 bits 数组中,这样下来,出现三次的元素,bits 数组上的值一定能被 3 整除;找出不能被 3 整除的位,计算出实际的十进制数即可。

class Solution {
    public int singleNumber(int[] nums) {
        int[] bits = new int[32];
        int n = nums.length;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < 32; ++j) {
                bits[j] += ((nums[i] >> j) & 1);
            }
        }
        
        int res = 0;
        for (int i = 0; i < 32; ++i) {
            if (bits[i] % 3 != 0) {
                res += (1 << i);
            }
        }
        return res;
        
    }
}