“异或”处理数组的相关算法的面试题

来源:互联网 发布:it618淘宝客导购源码 编辑:程序博客网 时间:2024/06/05 22:31

例1,寻找数组中丢失的数。。。
有一组数字,从1到n减少了一个数,顺序也被打乱了,放在一个n-1的数组里,请找出丢失的数字。

解题思路:1,对1-n个数做异或运算,得到XOR = 1^2^3^4….^n。
2, 用XOR与当前n-1数组的所有元素依次取异或:
因为XOR中与当前数字相同的数,都在异或运算中抵消掉了,最终剩下的,就是我们要找的那个丢失的数。

void FindNumsAppearOnce(int data[], int length, int &num1, int &num2){      if (length < 2)            return;  int resultExclusiveOR = 0;      for (int i = 0; i < length; ++ i)            resultExclusiveOR ^= data[i];  unsigned int indexOf1 = FindFirstBitIs1(resultExclusiveOR);  num1 = num2 = 0;      for (int j = 0; j < length; ++ j)      {  if(IsBit1(data[j], indexOf1))                  num1 ^= data[j];            else                  num2 ^= data[j];      }}unsigned int FindFirstBitIs1(int num){      int indexBit = 0;      while (((num & 1) == 0) && (indexBit < 32))      {            num = num >> 1;            ++ indexBit;      }   return indexBit;}bool IsBit1(int num, unsigned int indexBit){      num = num >> indexBit;   return (num & 1);   }
0 0
原创粉丝点击