确定只出现曾有两位数字数组

确定只出现曾有两位数字数组

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

请敲代码,找了两个数字只出现一次。它需要的时间复杂度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\n",x,y);
    getchar();
    return 0;
}

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117464.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • ubuntu php环境搭建(ubuntu python安装)

    1.安装Apachesudoapt-getinstallapache2测试:浏览器访问http://localhost//会出现网页。查看状态:serviceapache2status/start/stop/restartWeb目录:/var/www安装目录:/etc/apache2/全局配置:/etc/apache2/apache2.con…

    2022年4月16日
  • list C++实现

    list C++实现

    2021年11月13日
  • JAVA中读写文件操作

    JAVA中读写文件操作java文件读取有两种类型,我这里的是字节流的读取操作packagetest1;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importja…

    2022年7月14日
  • Linux 下MySQL备份[通俗易懂]

    Linux 下MySQL备份[通俗易懂]Linux下MySQL数据库备份和恢复Linux下MySQL数据库有逻辑备份和物理备份,也可以分为完全备份、部分备份。·完全备份是指备份整个数据集(即整个数据库)·部分备份是指备份部分数据集(只备份一个表)逻辑备份最大优点是对于各种存储引擎,都可以使用同样的方法来备份。而物理备份则不同,不同的存储引擎有着不同的备份方法。mysqldump基本语法mysqldump-uUs…

    2022年6月16日
  • java命令不是内部或外部命令_运行cmd不是内部或外部命令

    java命令不是内部或外部命令_运行cmd不是内部或外部命令‘javah’不是内部或外部命令,也不是可运行的程序或批处理文件。在生成Java头文件时报错,经查询发现新版的Java不使用javah的命令了,而是使用javac-h用法:javac–h<directory><sourcefiles>将路径cd到需要生成头文件的文件夹后,输入命令:javac-h./Java2cpp.java即可生成头文件。其中,“-h./”表示头文件生成到当前目录。…

    2022年9月24日
  • perl正则表达式实现大写字母转小写字母

    perl正则表达式实现大写字母转小写字母这个功能不难,但是要求必须用s///的形式,而且后面不能加第三个参数,不能是s///g这样的形式。不过可以采用多个这样的表达式。例如 s/A/a/s/B/b/s/AB/ab/…………….最终就是要求所有这些表达式组合起来,使得不论输入多少个大写字符,都会被转化为小写。我在atftpd的pcre功能中需要我将大写的请求文件转化为小写,所以需要一个rules文件

    2022年5月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号