题目描述:
一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。
代码
#include<algorithm>
using namespace std;
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
int x_or = 0;
for (int d : data)
x_or ^= d;
//找出第一个为1的为位,很巧妙
x_or &= ~(x_or - 1);
//初始化为0,很重要
*num1 = 0, *num2 = 0;
for (int d : data)
if (x_or & d)
*num1 ^= d;
else
*num2 ^= d;
}
};
本文介绍了一种高效算法,用于从整型数组中找出仅出现一次的两个数字,其余数字均出现偶数次。通过使用异或运算,巧妙地分离出目标数字,实现了O(n)的时间复杂度。

3120

被折叠的 条评论
为什么被折叠?



