问题描述:
/*
一个极大数组,数组里面有一系列数,其中有一个数单独出现一次,其它的数出现了两次,
请找出这个单独出现的数
时间复杂度O(n),空间复杂度O(1)
*/
// 利用位异或性质
/*
一个极大数组,数组里面有一系列数,其中有一个数单独出现一次,其它的数出现了两次,
请找出这个单独出现的数
时间复杂度O(n),空间复杂度O(1)
*/
// 利用位异或性质
- #include<iostream>
- using namespace std;
- int singleNum(const int Num[], int s_length)
- {
- assert(s_length>0 && (s_length%2!=0));
- int single_num=0;
- for(int i=0; i<s_length; i++)single_num^=Num[i];
- return single_num;
- }
- int main()
- {
- const int NUM[]={1,2,34,2,6,1,9,18,34,100,100,9,6,99,18}; //single num is '99'
- cout<<singleNum(NUM, sizeof(NUM)/sizeof(int))<<endl;
- getchar();
- return 0;
- }