前情提要:
原题地址: Single Number III由于有两个所求数,所以要做两个操作:首先将全体数异或得到temp,temp中的set位是两个答案不同的位,接下来按此位将nums分成两部分各自异或即可得两个Single Number。
Java:
public class Solution {
public int[] singleNumber(int[] nums) {
int temp = 0;
for(int x:nums)
{
temp ^= x;
}
int bit = 0;
for(int i=0;i<32;i++)
{
if(((temp >> i) & 1) == 1)
{
bit = i;
break;
}
}
int ans1=0, ans2=0;
for(int x:nums)
{
if(((x >> bit) & 1) == 1)
{
ans1 ^= x;
}
else
{
ans2 ^= x;
}
}
int ans[] = {ans1,ans2};
return ans;
}
}