[剑指offer][面试题40]数组中只出现一次的数字

来源:互联网 发布:android sdk linux 编辑:程序博客网 时间:2024/04/30 01:39

一个整型数组中除了两个数字之外,其他的数字都出现了两次,写出程序找出这两个只出现了一次的数字,时间复杂度要求O(n),空间复杂度要求O(1).

#include <iostream>using namespace std;bool findNumsAppearOnce(int *piData, int iLen, int & iNum0, int & iNum1){if (iLen<2){return false;}int iXOR = 0;for (int i=0; i<iLen; i++){iXOR ^= piData[i];}int iFlag = 1;while ( !(iXOR & iFlag) && (iFlag<0x8FFFFFFF) ){iFlag <<= 1;}iNum0 = 0;iNum1 = 0;for (int i=0; i<iLen; i++){if (piData[i] & iFlag){iNum0 ^= piData[i];}else{iNum1 ^= piData[i];}}return true;}int main(){int data[8] = {2,4,3,6,3,2,5,5};int a, b;bool bFound = findNumsAppearOnce(data, 8, a, b);if (bFound){cout<<a<<" "<<b<<endl;}}


原创粉丝点击