由于所有數(shù)字都出現(xiàn)奇數(shù)次,
所以無(wú)法直接使用異或操作??紤]到計(jì)算機(jī)使用二進(jìn)制存儲(chǔ)數(shù)字,可以建立一個(gè)32
位的數(shù)字,統(tǒng)計(jì)每一位1出現(xiàn)的次數(shù),如果一個(gè)整數(shù)出現(xiàn)了三次,那么三個(gè)0或者三
個(gè)1對(duì)3取余都為0,對(duì)每個(gè)數(shù)的對(duì)應(yīng)位都加起來(lái)對(duì)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]<<i;
}
return result;
}