zoukankan      html  css  js  c++  java
  • 确定只出现曾有两位数字数组

    称号:除了外面两个数字为整数数组。其他人物都出现两次。

    请敲代码,找了两个数字只出现一次。它需要的时间复杂度O(n),空间复杂度是O(1)。

    或深足够的认识。
    要思路还是之前的数组中仅仅出现一次的数字的那种模式,一次遍历加上异或运算。那么这个异或的值肯定是这两个仅仅出现一次的数字的相异或的值。那么这个值的二进制表现形式中的1的结果就表示这两个数字在该bit位上不一样。那么通过此举,我们能够以这个bit位是否为1来从整个数组中把这两个仅仅出现一次的数字分开。

    通过此举。别的出现两次的数字一会被分到同一组,那么结果就是有两组数据。每组都是奇数个数字。都有仅仅出现一次的数字。

    #include<stdio.h>
    #include<assert.h>
    int findOutTwo(int *a,int n,int &x,int &y){
        assert(a);
        assert(n>2);
        int result=a[0];
        for(int i=1;i<n;++i)
            result^=a[i];
        int b=result&-result;
        x=0;
        y=0;
        for(int i=0;i<n;++i)
        {
            if(b&a[i])
                x^=a[i];
            else
                y^=a[i];
        }
        return 0;
    }
    int main()
    {
        int a[]={1,1,2,2,3,3,4,4,5,6};
        int x,y;
        findOutTwo(a,sizeof(a)/sizeof(int),x,y);
        printf("%d %d
    ",x,y);
        getchar();
        return 0;
    }

    结果为:
    这里写图片描写叙述

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    idea的一些常用快捷键
    php加密总结
    C 简单1
    webpack window 添加ES6支出
    webpack window 添加第三方库
    webpack window 处理图片和其他静态文件
    webpack window 使用sass来编译css样式
    webpack window 安装loader
    webpack window dev-server配置
    webpack window下配置的hello world
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4667321.html
Copyright © 2011-2022 走看看