zoukankan      html  css  js  c++  java
  • 给你n个数,其中有且仅有一个数出现了奇数次,其余的数都出现了偶数次。用线性时间常数空间找出出现了奇数次的那一个数。

    //有101个数,其中有50个数出现了两次,有一个数只出现了一次,找出出现一次的数
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int a[11] = {0};
        int i;
        int n = 0;
        printf("please input the arr :");
        for(i = 0;i < 11;i++)
        {
            scanf("%d",&a[i]);
        }
        for(i = 0;i < 11;i++)
        {
            n ^= a[i];
            
        }
        printf("appear the one time number is %d",n);
        system("pause");
        return 0;
    

    从头到尾异或一遍,最后得到的那个数就是出现了奇数次的数。这是因为异或有一个神奇的性质:两次异或同一个数,结果不变。再考虑到异或运算满足交换律,先异或和后异或都是一样的,因此这个算法显然正确。
  • 相关阅读:
    构造和析构
    const修饰的成员函数
    class和struct权限
    封装加强
    函数重载实现原理
    Unity2019破解hub
    Lua模拟stack
    函数重载
    LeanTween
    占位参数和默认参数
  • 原文地址:https://www.cnblogs.com/joyclub/p/4467940.html
Copyright © 2011-2022 走看看