[LeetCode]260. Single Number III

来源:互联网 发布:蜜蜂软件怎么注册 编辑:程序博客网 时间:2024/06/13 23:11

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;    }}


0 0