落单的数 III
来源:互联网 发布:zip解压软件 编辑:程序博客网 时间:2024/06/05 03:46
问题描述
http://www.lintcode.com/zh-cn/problem/single-number-iii/
给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。
样例
给出 [1,2,2,3,4,4,5,3],返回 1和5
笔记
先把数据全都异或一个遍,出现两次的数全都被抵消了。剩下不同的两个数a和b的异或。因为a与b不同,a^b肯定不为0。
找出a^b的最低位的1,这个1的出现是因为a的这一位和b的这一位不同。(异或的性质)。于是可以根据这一位是否是1把整个数组一分为二。再把两个数组分别异或个遍,就可以得到这两个数。
注意:以下写法是错的,有优先级问题,被自己坑了。。
if (i & mod == mod)
正确的写法是
if ((i & mod) == mod)
代码
class Solution {public: /** * @param A : An integer array * @return : Two integers */ vector<int> singleNumberIII(vector<int> &A) { // write your code here int axorb = 0; for (auto i : A) { axorb ^= i; } int mod = axorb & (~(axorb - 1)); // cout << mod << endl; // cout << (mod & 4) << endl; // cout << (mod & 12) << endl; vector<int> arr1, arr2; for (auto i : A) { if ((i & mod) == mod) arr1.push_back(i); else arr2.push_back(i); } int a = 0; for (auto i : arr1) a ^= i; int b = 0; for (auto i : arr2) b ^= i; vector<int> res = {a, b}; return res; }};
0 0
- 落单的数 III
- 落单的数 III
- 落单的数 III
- 落单的数III
- 落单的数 III
- LintCode-落单的数 III
- LintCode:落单的数 III
- lintcode-落单的数 III
- 落单的数 III-LintCode
- lintcode -- 落单的数III
- lintCode-落单的数III
- 落单的数(落单的数 & 落单的数 II & 落单的数 III)
- python_lintcode_82落单的数_83落单的数 II_84落单的数 III
- lintcode-落单的数III-84
- Lintcode—落单的数III
- LintCode 84. 落单的数III
- [LintCode] 落单的数 III Single Number III
- 84.Single Number III-落单的数 III(中等题)
- java图形验证码生成工具类
- java 23种设计模式全解析
- Android之夜间模式的实现
- JavaScript RegExp 对象
- Tomcat中server.xml配置详解
- 落单的数 III
- ITOO-无法直接启动带有“类库输出类型”的项目
- HDU Problem 1285 确定比赛名次【拓扑排序】
- [Android]新功能引导高亮显示遮罩层View
- 长按事件
- 皮肤检测椭圆轮廓
- 数据结构与算法- 栈与队列的实现
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- nginx代理功能演示