Bit computing - prove safety offer- face questions 56_2- array of numbers that uniquely occur only once

/*
topic:
	In addition to the array once outside a number appears only, the remaining digits appear three times.
*/
/*
Ideas:
	Bit computing.
*/

#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>

using namespace std;

int FindNumsAppearOnce(int data[],int length){
    if(length < 1 || data == nullptr) return -1;

    int intSize = sizeof(int)*8;
    int bitSum[intSize] = {0};

    // Calculate the number of Members of 1
    for(int i = 0; i < length; i++){
        int bisMask = 0;
        for(int j = intSize-1; j>= 0; j--){
            bitSum[j] += ((data[i]>>bisMask) & 1);
            bisMask++;
        }
    }

    // you appear on non-integer multiple of 3, the bits belonging to occur only once digital
    int bisMask = 0;
    int res = 0;
    for(int i = intSize-1; i >= 0; i--){
        if(bitSum[i] % 3 == 1){
            res += (1<<bisMask);
            bisMask++;
        }
    }
    return res;
}

int main () {
    int data[] = {2,2,2,3,6,4,5,5,4,6,6,5,4,32,32,32};
    cout<<FindNumsAppearOnce(data,sizeof(data)/sizeof(data[0]));
}

   

Guess you like

Origin www.cnblogs.com/buaaZhhx/p/12108277.html