问题:一个整数数组里除了两个数之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度为O(n), 空间复杂度为O(1).(2012百度)
#include<iostream> using namespace std; int findFirst1(int num) { int n=0; while((num&1)==0&&n<32) { num=num>>1; n++; } return n; } bool is_1(int num, int count) { num=num>>count; return (num&1); } void FindNumsAppearOnce(int A[],int length, int &num1, int &num2) { if(length<2)return; int res=0; for (int i=0;i<length;i++) { res^=A[i]; } int count=findFirst1(res); for (int i=0;i<length;i++) { if (is_1(A[i], count)) { num1^=A[i]; } else { num2^=A[i]; } } } int main() { int A[]={1, 2, 7, 8, 1, 7, 10, 5, 8, 10}; int n=sizeof(A)/sizeof(int); int num1=0, num2=0; FindNumsAppearOnce(A, n, num1, num2); cout<<"num1="<<num1; cout<<"num2="<<num2; return 0; }
时间: 2024-10-25 23:16:48