首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

【一个面试题】从数组中找到满足条件的数目字

2013-09-18 
【一个面试题】从数组中找到满足条件的数字一个整数数组,里面的整数元素,满足以下的条件:里面只有两个整数只

【一个面试题】从数组中找到满足条件的数字
一个整数数组,里面的整数元素,满足以下的条件:
里面只有两个整数只出现过一次,其他的整数都是成对出现的。找到这两个整数。

例如
[1, 1, 2, 2, 3, 3, 4, 5], 4和5就是我们要找的。

要求时间复杂度o(n)。
[解决办法]
扫描两次就行了呀……
http://blog.csdn.net/cxllyg/article/details/7636226
[解决办法]
http://blog.csdn.net/hackbuteer1/article/details/6889217

这里介绍的比较好

[解决办法]


bool IsBit1(int num, unsigned int indexBit)
{
      num = num >> indexBit;
 
      return (num & 1);
}

unsigned int FindFirstBit(int num)
{
      int index = 0;
      while (((num & 1) == 0) && (index < 32))
      {
            num = num >> 1;
            ++index;
      }
 
      return index;
}


void Find(int data[], int length, int &num1, int &num2)
{
      if (length < 2)
            return;
 
      int resultOR = 0;
      for (int i = 0; i < length; ++ i)
            resultOR ^= data[i];
 
      unsigned int indexOf1 = FindFirstBit(resultOR);
 
      num1 = num2 = 0;
      for (int j = 0; j < length; ++ j)
      {


            if(IsBit1(data[j], indexOf1))
                  num1 ^= data[j];
            else
                  num2 ^= data[j];
      }
}

热点排行