56 - I. 数组中数字出现的次数
思路:位运算
- 计算数组的异或和
- 循环左移计算m
- 根据m拆分数组
- 得到结果
class Solution {
public:
vector<int> singleNumbers(vector<int>& nums) {
int x=0,y=0,m=1,sum=0;
for(int n:nums){
sum^=n;
}
while((m&sum)==0) m<<=1;
for(int n:nums){
if(n&m)
x^=n;
else
y^=n;
}
return {x,y};
}
};
时间复杂度 O(n)
空间复杂度 O(1)