标签:
int bitXORResult=0;
for(int i=0;i<Length; i++){
bitXORResult^=arr[i];
}
int lastBitOne=findLastBitsOne(bitXORResult); //找到了从最后一位开始找为1的位
int findLastBitsOne(int v_bitsResult){
int shiftCount=0;
int bit=1;
while(v_bitsResult^bit==1){
shiftCount++;
v_bitsResult=v_bitsResult>>1;
}
return shiftCount;
}
ifndef ONE_TIME_ARR_H
#define ONE_TIME_ARR_H
#include<iostream>
int findLastBitsOne(int v_bitsResult);
bool isBitOne(int value,int bitIndex);
void findNumsApprenceOnce(int *arr,int Length,int *num1,int *num2){
if(arr==NULL||Length<=2){
return;
}
int bitXORResult=0;
for(int i=0;i<Length; i++){
bitXORResult^=arr[i];
}
if(0==bitXORResult){
return;
}
int lastBitOne=findLastBitsOne(bitXORResult); //找到了从最后一位开始找为1的位
*num1=0;
*num2=0;
for(int i=0;i<Length; i++){
if(isBitOne(arr[i],lastBitOne)){
(*num1)^=arr[i];
}else{
(*num2)^=arr[i];
}
}
}
int findLastBitsOne(int v_bitsResult){
int shiftCount=0;
int bit=1;
while(v_bitsResult^bit==1){
shiftCount++;
v_bitsResult=v_bitsResult>>1;
}
return shiftCount;
}
bool isBitOne(int value,int bitIndex){
value=value>>bitIndex;
return (value&1);
}
#endif
标签:
原文地址:http://www.cnblogs.com/yml435/p/4655469.html