leetcode-面试题56-①。数组中出现的次数

题目描述:

 

 方法一:分组异或

class Solution {
    public int[] singleNumbers(int[] nums) {
        int sum = 0;
        int [] res = new int[2];
        for(int num:nums){
            sum ^= num;
        }
        int lowbit = sum & (-sum);
        for(int num:nums){
            if((num & lowbit) == 0){
                res[0] ^= num;
            }else{
                res[1] ^= num;
            }
        }
        return res;
    }
}

 附:找出一个数二进制中第一位不是0的:h=num^(num&(num-1))  最后一位不是0的: h=num&(-num)

posted @ 2020-04-28 12:43  oldby  阅读(156)  评论(0编辑  收藏  举报