首页 > 其他分享 >数组中只出现一次的两个数字

数组中只出现一次的两个数字

时间:2023-05-08 20:22:04浏览次数:37  
标签:一次 数字 nums int 异或 xy 数组

思路

设两个数字分别为 x,y

  1. 将所有数字异或起来,得到的结果设为 s,s=x^y
    • 因为相同两个数字,异或结果为 0,由于异或运算满足交换律,因此最后就剩两个数字异或
  2. 从 s 的二进制表示中,找到任意为 1 的位 k
    • xy 的二进制表示在第 k 位上,一个是 0,一个是 1
    • 因为 xy 不同,因此 s 不为 0,一定能找到k
  3. 将数组中所有数根据第 k 位二进制是否为 1划分成两类;xy 分别位于不同的两类
  4. 对于每一类,问题转换为:找出数组中唯一出现一次的数
    • 将所有数字异或起来,得到的结果就是唯一出现一次的数字
  5. 找出任意一类的 x,即可算出 y:
    • 已知 x^y=s;s^x=x^y^x=y;

代码

class Solution {
public:
    vector<int> findNumsAppearOnce(vector<int>& nums) {
        int s=0;
        for(auto i:nums)
            s^=i;
        int k=0;
        while(!(s>>k&1))  k++;
        int x=0;
        for(auto i:nums)
            if(i>>k&1)  x^=i;
        return {x,s^x};
    }
};

标签:一次,数字,nums,int,异或,xy,数组
From: https://www.cnblogs.com/tangxibomb/p/17383002.html

相关文章

  • (python) 数据库一次 Connection 连接,不同 cursor
    数据库一次Connection连接,不同cursor的最简洁代码:importpymysqlclassDatabase(object):connection=Nonedef__init__(self):ifnotDatabase.connection:Database.connection=pymysql.connect(host="127.0.0.1",......
  • 数字图像处理(绪论)——冈萨雷斯
    一、图像处理的范围  数字图像处理是指借助于数字计算机来处理数字图像。本书范围:其输入和输出都是图像的处理,包含从图像中提取特征的处理,也包含各个目标的识别。二、图像处理的起源起源于从通过海底电缆从伦敦送到纽约(首先使用特殊的打印设备对图片编码,然后在接收端重建这......
  • 解决Glide加载圆形图片,第一次只显示点位图的问题
    解决Glide加载圆形图片,第一次只显示点位图的问题master1parent 54cf183 commit ce068f3db5033b9af4b1b6ca5b9e77184dce9bcb studiotang committed on4Nov2015UnifiedSplit3changedfiles with 37additions and 10deletions. ......
  • .NET EFCode内存溢出事故一次记录
     以下代码导致内存溢出:是一段连表查询导致查询不到的问题varonelst=awaitdbpTasks.Where(Epr).Join(Context.DbpTaskMetadata.AsNoTracking().GroupBy(meta=>meta.Taskid).Select(g=>new{Key=g.Key,Value=g}),src=>src.Taskid,meta=>meta.Key,(src,......
  • 如何将数组生成可烧写bin文件
    ASM_CALLISTO_WAVE.bin烧写文件是由wave.bin+ curveTable.bin组成1、先使用工具C2B.exe将对应的TXT文件生成bin文件此工具是正点原子的工具,直接在它的网址下载即可txt文件格式为: 1{64,67,70,73,77} 按如下步骤即可在同文件夹得到同名bin文件 2、合并两个bin文件......
  • VC++ 编辑框只输入数字
    voidCNewEdit::OnChar(UINTnChar,UINTnRepCnt,UINTnFlags)如下;其它需要可以灵活定制。voidCNewEdit::OnChar(UINTnChar,UINTnRepCnt,UINTnFlags){if(nChar==VK_BACK)//BackSpaceCEdit::OnChar(nChar,nRepCnt,nFlags);////Someinvariableparame......
  • 数组声明、基本特点 数组边界
        ......
  • vue+element输入框校验输入汉字再输入数字看似正常,实则有大问题,保存时数据不对
    在vue+elementUI项目中经常会使用到输入框限制为整数或者小数的需求,一般采用如下oninput="value=value.replace(/[^0-9.]/g,'')"解决,<el-input    :placeholder="请输入整数或者小数"    v-model="inputValue"   oninput="value=value.replace(/[^0-9......
  • Java 三方接口PHP写法;doHmacSHA2; 将字节数组转换成16进制字符串;Mac.getInstance;Hma
    先看一段Java代码,一个签名过程1packagecom.sixents.bss.filter;234importorg.apache.http.HttpEntity;5importorg.apache.http.NameValuePair;6importorg.apache.http.client.entity.UrlEncodedFormEntity;7importorg.apache.http.client.met......
  • 记一次 .NET 某车零件MES系统 登录异常分析
    一:背景1.讲故事这个案例有点特殊,以前dump分析都是和软件工程师打交道,这次和非业内人士交流,隔行如隔山,从指导dump怎么抓到问题解决,需要一个强大的耐心。前几天有位朋友在微信上找到我,说他们公司采购的MES系统登录的时候出现了异常,让我帮忙看一下,我在想解铃还须系铃人,怎么的也不......