题目链接:https://leetcode.com/problems/single-number-iii/
题目:
Given an array of numbers nums
, in which exactly two elements appear only
once and all the other elements appear exactly twice. Find the two elements that appear only once.
For example:
Given nums = [1, 2, 1, 3, 2, 5]
, return [3,
5]
.
Note:
- The order of the result is not important. So in the above example,
[5, 3]
is also correct. - Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
题意:给定一个数组nums,其中除了两个元素只出现一次外,其他元素均出现两次,找出仅出现一次的两个元素
提示:1.对输出结果的顺序不作要求
2.算法要求线性复杂度
分析:仍然是异或的用法,题目较简单,直接看代码,代码中有注释
代码:
public class Solution {
public int[] singleNumber(int[] nums) {
int[] single = new int[2];
int[] wei = new int[32];
int yhResult = 0;
for(int i=0; i<nums.length; i++) {
yhResult ^= nums[i];
}
for(int i=0; i<32; i++) {
if((yhResult & 1<<i) != 0) {<span style="white-space:pre"> </span>//如果异或结果的某位为1,说明两个单数在该位是不同的
for(int j=0; j<nums.length; j++) {
if((nums[j] & 1<<i) != 0)<span style="white-space:pre"> //按该位相同与不同,分两组</span>分别异或,可直接得出结果元素
single[0] ^= nums[j];
else
single[1] ^= nums[j];
}
break;
}
}
return single;
}
}