260. 只出现一次的数字 III
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
示例 1:
输入:nums = [1,2,1,3,2,5]
输出:[3,5]
解释:[5, 3] 也是有效的答案。
出现偶数次的数字,经过 异或 会变0,本题,所有数字进行异或后的 XorNum=x1 xor x2,x1和x2均只出现了一次。
XorNum!=0,其中为1的位置,表示两个数字中这位数字不同,根据这个位置是否为1,将多有的数字分成两组,会将x1和x2分到不同的组中
class Solution { public: vector<int> singleNumber(vector<int>& nums) { int sum=0; for(auto num:nums) sum=sum^num; int pos=-1; for(int i=0;i<=31;i++) if(sum & (1<<i)) {pos=i; break;} vector<int> res(2,0); for(auto num:nums) { if(num & (1<<pos)) res[0]=res[0]^num; else res[1]=res[1]^num; } return res; } };