题解 | #数组中只出现一次的两个数字#
数组中只出现一次的两个数字
https://www.nowcoder.com/practice/389fc1c3d3be4479a154f63f495abff8
一、知识点
数组 数学
二、解题思路
初始化xorVal为0,遍历数组将所有元素做异或运算,得出两个不同数字的异或结果。
从二进制最低位开始,找到xorVal第一个二进制位为1的位置。
将原数组按照该位进行分组,求每组出现一次的数字。
最后判断下两个数字的大小,保持升序输出。
三、C++解法
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型vector
*/
vector<int> FindNumsAppearOnce(vector<int>& nums) {
int len = nums.size();
int xorVal = 0;
for (int i = 0; i < len; i ++) {
xorVal ^= nums[i];
}
int mask = 1;
while ((xorVal & mask) == 0) {
mask <<= 1;
}
int a = 0, b = 0;
for (int i = 0; i < len; i ++) {
if ((nums[i] & mask) == 0) {
a ^= nums[i];
} else {
b ^= nums[i];
}
}
if (a > b) {
swap(a, b);
}
return vector<int>{a, b};
}
};
#在找工作求抱抱#面试必刷Top101-题解 文章被收录于专栏
手把手带你刷题
查看24道真题和解析