描述
一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
数据范围:数组长度 2≤n≤1000,数组中每个数的大小 0<val≤1000000
要求:空间复杂度 O(1),时间复杂度 O(n)
提示:输出时按非降序排列。
示例1
输入:
[1,4,1,6]返回值:
[4,6]说明:返回的结果中较小的数排在前面
示例2
输入:
[1,2,3,3,2,9]返回值:
[1,9]
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型vector
* @return int整型vector
*/
vector<int> FindNumsAppearOnce(vector<int>& array) {
// write code here
int x=0,y=0,n=0,m=1;
for(int &x:array){
n^=x;
}
while((n&m)==0){
m<<=1;
}
for(int &num:array){
if(num&m){
x^=num;
}else{
y^=num;
}
}
if(x<y)return {x,y};
return {y,x};
}
};