
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