Single Number III
来源:互联网 发布:linux 查看最后500行 编辑:程序博客网 时间:2024/06/04 19:36
假设数组中两个不同的数字为 A 和 B;
通过遍历整个数组并求整个数组所有数字之间的 XOR,根据 XOR 的特性可以得到最终的结果为 AXORB = A XOR B;
通过某种特定的方式,我们可以通过 AXORB 得到在数字 A 和数字 B 的二进制下某一位不相同的位;因为A 和 B 是不相同的,所以他们的二进制数字有且至少有一位是不相同的。我们将这一位设置为 1,并将所有的其他位设置为 0,我们假设我们得到的这个数字为 bitFlag;
那么现在,我们很容易知道,数字 A 和 数字 B 中必然有一个数字与上 bitFlag 为 0;因为bitFlag 标志了数字 A 和数字 B 中的某一位不同,那么在数字 A 和 B 中的这一位必然是一个为 0,另一个为 1;而我们在 bitFlag 中将其他位都设置为 0,那么该位为 0 的数字与上 bitFlag 就等于 0,而该位为 1 的数字与上 bitFlag 就等于 bitFlag
现在问题就简单了,我们只需要在循环一次数组,将与上 bitFlag 为 0 的数字进行 XOR 运算,与上 bitFlag 不为 0 的数组进行独立的 XOR 运算。那么最后我们得到的这两个数字就是 A 和 B。
class Solution {public: vector<int> singleNumber(vector<int>& nums) { int diff = accumulate(nums.begin(), nums.end(), 0, bit_xor<int>()); diff &= -diff; vector<int> res(2, 0); for(auto &a : nums){ if(a & diff) res[0] ^= a; else res[1] ^= a; } return res; }};
阅读全文
0 0
- Single Number III
- Single Number III
- [LeetCode] Single Number III
- [leetcode] Single Number III
- 260 Single Number III
- [Leetcode]Single Number III
- [leetcode] Single Number III
- Leetcode: Single Number III
- 260 Single Number III
- LeetCode || Single Number III
- Single Number III
- Single Number III
- Single Number III
- [刷题]Single Number III
- Single Number III
- Leetcode75: Single Number III
- leetCode---Single Number III
- *LeetCode-Single Number III
- synchronized
- DataFrame 数据合并方法
- 数组中的排序问题
- MySQL 学习教程(十)【整理】-联合查询
- 2017.11.7总结
- Single Number III
- python 中MethodType方法详解和使用
- #数学期望题目#
- 99乘法表
- Django 下载文件报错UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xb1 in position 5: illegal multibyte
- Tomcat7.0.42源码研读之BIO(七)
- Hive2.2.0安装
- Unsupported major.minor version 52.0 问题解决
- ConcurrentLinkedQueue的实现原理和源码分析