注册 登录
编程论坛 VC++/MFC

数列L中有n个数字,其中有K个数字出现2次,1个数字出现1次,故n=2k+1,用O(1)空间,尽快找出只出现一次的那个数字

wlhdhn 发布于 2011-09-17 14:00, 794 次点击
如题,请各位大牛指教!谢谢!
3 回复
#2
wlhdhn2011-09-17 17:06
我写了一个程序,已调试通过:
int Findsignal(int a[],int N)
{
for(int i=0;i<N;++i)
    if(a[i]!=0)
     {
        for(int j=i+1;j<N;++j)
           if(a[j]==a[i])
           {
              a[j]=a[i]=0;
               break;
           }
        if(j>=N)
          return a[i];
    }
}
#3
wlhdhn2011-09-17 17:11
上面的时间复杂度,最好的情况时间复杂度O(1),最差的情况时间复杂度是O(n^2),各位大牛给指点下,看还有没有更好的
#4
wlhdhn2011-09-18 14:02
找到解法啦!用异或运算
如:
int Findsigle(int a[],int n)
{
  int ret=0;
  for(int i=0;i<n;++i)
    ret^=a[i];
   return ret;
}
这个时间复杂度是O(n)
1