博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Single Number III
阅读量:6223 次
发布时间:2019-06-21

本文共 678 字,大约阅读时间需要 2 分钟。

hot3.png

 原题:给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。

样例:给出[1,2,2,3,4,4,5,3],返回1和5

既然我们已经解决了2*n+1的问题,现在我们看到这个题,可以往那边去想,把这个题目分解为2*n+1问题

vector
 singleNumberIII(vector
& nums){    int t  = 0;    for(int i = 0; i < nums.size(); i++)    {        t ^= nums[i];    }    int mask = t & ~(t-1);    //mask的作用是分组,找到t最后一位非0的位,    //该位为1的是一组,为0的是一组,这样就转化为了    //我们熟悉的2*n+1问题    int x = 0;    int y = 0;    for(int j = 0; j < nums.size(); j++)    {        if(nums[j] & mask)        {            x ^= nums[j];        }        else        {            y ^= nums[j];        }    }    return vector
{x,y};}

 

转载于:https://my.oschina.net/lucusguo/blog/503172

你可能感兴趣的文章
noip普及组2018T1 标题统计
查看>>
vim配置@year12
查看>>
排序——数据结构课程作业
查看>>
Grunt Gulp Browserify Webpack
查看>>
Shortest Distance from All Buildings
查看>>
rdm代码网址
查看>>
乘方取模计算(模幂计算)
查看>>
Ubuntu安装PyCharm
查看>>
如何将CTB词性标签映射为universalPOs标签
查看>>
BZOJ5299:[CQOI2018]解锁屏幕(状压DP)
查看>>
Mac OSX 快捷键&命令行总览
查看>>
c++面试题之内存分配
查看>>
水果忍者(切西瓜)
查看>>
集合问题
查看>>
HTML
查看>>
渗透测试辅助工具--在线版
查看>>
Python(Handwriting)
查看>>
09-C语言选择结构(二)
查看>>
虚拟机类加载机制
查看>>
C++0X 学习之 auto
查看>>