您的位置:首页 > 其它

[LeetCode]260. Single Number III

2017-01-31 19:28 429 查看
https://leetcode.com/problems/single-number-iii/

找出正好出现一次的两个数,其他数字都是正好出现两次

先全部异或,然后所得结果里找到二进制中某一位是一的,再把数组中所有该位是一的做异或,得到n1;该位不是一的做异或,得到n2。

public class Solution {
public int[] singleNumber(int[] nums) {
int all = 0;
for (int num : nums) {
all ^= num;
}
int index = 0;
while (((1 << index) & all) == 0) {
index++;
}
int n1 = 0;
for (int num : nums) {
if (((1 << index) & num) == 0) {
n1 ^= num;
}
}
int n2 = 0;
for (int num : nums) {
if (((1 << index) & num) != 0) {
n2 ^= num;
}
}
int[] res = {n1, n2};
return res;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: