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

问题描述:

给出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;
}
    原文作者:happy_XYY
    原文地址: https://blog.csdn.net/oMengLiShuiXiang1234/article/details/51205934
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞