137. Single Number II

由于所有数字都出现奇数次,
所以无法直接使用异或操作。考虑到计算机使用二进制存储数字,可以建立一个32
位的数字,统计每一位1出现的次数,如果一个整数出现了三次,那么三个0或者三
个1对3取余都为0,对每个数的对应位都加起来对3取余,剩下的就是 Single
Number 。

int singleNumber(int* nums, int numsSize) {
    
    int * bit = calloc(32, sizeof(int));
    
    int result = 0;
    for(int i = 0; i < 32; i++){
        for(int j = 0; j < numsSize;j++){
            bit[i] += nums[j]>>i&0x1;
            bit[i] %= 3;
        }
        
        result |= bit[i]<

你可能感兴趣的:(137. Single Number II)