260.只出现一次的数字III
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。来源:力扣(LeetCode)
示例 :
输入: [1,2,1,3,2,5]
输出: [3,5]
解决方案:异或与位运算
相同数字异或操作为零,对所有数字异或操作,得到出现一次的数字的异或值,用mask,然后mask&(-mask)得到mask最后一个1的位置,是两个数字其中一个的,根据这个差异把所有数字分为两部分进行异或,最后得到两个只出现一次的数字。
示例:
C++:
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int mask = 0;
for(auto n:nums){
mask^=n;
}
int diff = mask&(-mask);
int x = 0,y = 0;
for(auto u:nums){
if(diff&u){
x^=u;
}else{
y^=u;
}
}
return {x,y};
}
};
Python3:
def singleNumber(self,nums:int)->List[int]:
mask = 0;
for n:nums:
mask^=n
diff = mask&(-mask)
x,y=0,0
for n:nums:
if diff&n:
x^=n
else:
y^=n
return [x,y]
版权声明:本文为weixin_42846216原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。