原题地址:https://leetcode-cn.com/problems/single-number-iii/
题目描述:
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
示例 :
输入: [1,2,1,3,2,5]
输出: [3,5]
解题方案:
相关:【LeetCode】136. 只出现一次的数字(JAVA)
遍历方法同136,做异或运算的话需要处理两次。将数组中所有数做异或运算后得到的数为两个只出现一次的元素异或后的结果。取该值的某一不为0位,该位为1说明在这一位上所求的两个元素值一个为0一个为1,因为只有两个数不同时异或得到的值才为1。把数组中所有这一位为0的数异或,得到的即为这一位为0的所求元素,为1的同理。
代码:
class Solution {
public int[] singleNumber(int[] nums) {
int res = 0 ;
int[] result = new int[2];
for(int i = 0; i <= nums.length - 1; i ++)
{
res ^= nums[i];
}
int bit_1 = 1;
while((res & 1) == 0)
{
res >>= 1;
bit_1 <<= 1;
}
for(int i = 0; i <= nums.length - 1; i ++)
{
if((nums[i] & bit_1) == 0)
result[0] ^= nums[i];
else
result[1] ^= nums[i];
}
return result;
}
}