用异或巧妙的解决对比问题

问题描述:

给出2n+1个数

其中有n个数是成对出现的

找出里面只出现了一次的那个数

当然 如果先快排完了 排除掉相同的数 当然可以找到那个只出现过一次的数

但是快排的复杂度是n*logn

据说可以用O(n)复杂度和O(1)的额外空间解决


原Blog地址: 简便方法求解一道算法题目


利用^操作符,将数组中的数字逐位异或,如果是与自身相同的数字异或则结果为0,否则结果为本身。

源代码:

#include<stdio.h>

int Find(int Data[],int N) 
{ 
    int i;
    static int j; 
    j=0; 
    for(i = 0;i < N; )
        j ^= Data[i++]; 
    return j; 
} 


int main()
{
    int Data[] = {1,2,1,2,3,4,3,4,5,6,7,7,6,5,0};
    int len = sizeof(Data)/sizeof(Data[0]);

    int ret = Find(Data,len);

    printf("%d/n",ret);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值