비트 컴퓨팅 - 고유 한 번만 발생 수의 얼굴 질문 제공 - 안전을 증명 56_2- 배열

/ * 
제목 : 
	표시 만 남은 자리 세 번 나타날 수 이외에 외부 일단 어레이. 
* / 
/ * 
생각 : 
	비트 컴퓨팅. 
* / 

#INCLUDE <iostream> 
#INCLUDE <CString을> 
#INCLUDE <벡터> 
#INCLUDE <알고리즘> 
#INCLUDE <지도> 

은 USING 스페이스 STD; 

INT FindNumsAppearOnce {(데이터 [], INT 길이 INT) 
    . IF (길이 <1 || == nullptr 데이터) -1을 리턴; 

    INT = intSize sizeof의 (INT) * 8]. 
    INT BITSUM [intSize] = {0} 

    // 숫자 1 계산 
    I 0 = (INT를 들어, I <길이; I ++ ) { 
        INT BISMASK = 0; 
        - (; J> = 0 J) {INT 1 J = intSize.위한 
            & 1) BITSUM [J] + = ((데이터 [I] >> BISMASK). 
            BISMASK ++;
 
    3의 정수가 아닌 배수 // 당신이 나타납니다, 비트 번호는 한 번만 나타납니다 속하는 
    INT BISMASK = 0; 
    INT RES = 0; 
    에 대한 (INT I = -intSize 1; I> = 0;. I -) { 
        IF ([I] == BITSUM 3. 1 %). { 
            RES = + (1 << BISMASK.) 
            BISMASK ++; 
        } 
    } 
    리턴 RES; 
} 

INT의 main () { 
    INT 데이터 [] = {2,2,2,3, } 6,4,5,5,4,6,6,5,4,32,32,32; 
    COUT << FindNumsAppearOnce (데이터 sizeof의 (데이터) / sizeof의 (데이터 [0])); 
}

   

추천

출처www.cnblogs.com/buaaZhhx/p/12108277.html