NC75数组中只出现一次的数字(位运算法)
NC75数组中只出现一次的数字(位运算法)
- 1、题目描述:
-3、 设计思想:
详细操作流程看下图:
-5、代码:
c++版本:
class Solution
{
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2)
{
int n = data.size();//求出数组的长度
int eor = 0; //用来保存那两个只出现1次的数的异或值
for(int i = 0; i < n; i ++)
{
eor ^= data[i];//将整个数组异或
}
/// eor = a ^ b
/// eor != 0
/// eor必然有一个位置上是1
int rightOne = eor & (~eor + 1); // 提取出最右的1
int onlyOne = 0;//用来保存只出现1次的数的其中的那一个
for(int i = 0; i < n; i ++)
{
if((data[i] & rightOne) != 0)
{
onlyOne ^= data[i];//寻找那个数
}
}
*num1 = onlyOne;
*num2 = (eor ^ onlyOne);
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
Java岗位面试真题宝典 文章被收录于专栏
本面试宝典均来自校招面试题目大数据进行的整理

