其他分享
首页 > 其他分享> > 力扣刷题——位运算—只出现1次的数字

力扣刷题——位运算—只出现1次的数字

作者:互联网

260. 只出现一次的数字 III

在这里插入图片描述

class Solution {
    public int[] singleNumber(int[] nums) {

        int ret = 0;
        for (int i = 0; i < nums.length; i++) {
            ret ^= nums[i];
        }
        int div = 1;
         假设两个数是 a、b
        int a=0;
        int b=0;
         找到 a、b 任意一个 二进制位相异 的地方div
        while ((div & ret) == 0){
            div <<= 1;
        }
        for (int num:nums) {
             相同的数,和div相 & ,得到的结果也一样(若为0,都为0;若为1,都为1),就会被分到同1个组
             那两个不同的数,和div相 & , 得到的结果不同,会被分到不同的组
            if ((div & num) != 0)
                a ^= num;
            else
                b ^= num;
        }
        return new int[]{a,b};
    }
}

标签:运算,nums,int,ret,力扣,num,若为,div,刷题
来源: https://blog.csdn.net/m0_38057941/article/details/120253419