由于所有數(shù)字都出現(xiàn)奇數(shù)次,
所以無法直接使用異或操作顽决《烫酰考慮到計(jì)算機(jī)使用二進(jìn)制存儲數(shù)字,可以建立一個(gè)32
位的數(shù)字才菠,統(tǒng)計(jì)每一位1出現(xiàn)的次數(shù)茸时,如果一個(gè)整數(shù)出現(xiàn)了三次,那么三個(gè)0或者三
個(gè)1對3取余都為0赋访,對每個(gè)數(shù)的對應(yīng)位都加起來對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;
}