Bootstrap

力扣--LCR 177.撞色搭配

题目

整数数组 sockets 记录了一个袜子礼盒的颜色分布情况,其中 sockets[i] 表示该袜子的颜色编号。礼盒中除了一款撞色搭配的袜子,每种颜色的袜子均有两只。请设计一个程序,在时间复杂度 O(n),空间复杂度O(1) 内找到这双撞色搭配袜子的两个颜色编号。

示例 1:

输入:sockets = [4, 5, 2, 4, 6, 6]
输出:[2,5] 或 [5,2]

示例 2:

输入:sockets = [1, 2, 4, 1, 4, 3, 12, 3]
输出:[2,12] 或 [12,2]

提示:

2 <= sockets.length <= 10000

代码

class Solution {
public int[] sockCollocation(int[] nums) {
int z = 0;
for(int i = 0;i < nums.length; i++){
z = z ^ nums[i];
}

    int m = 1;
    while((m & z) == 0){
        m = m << 1;
    }

    int x = 0, y = 0;

    for(int i = 0;i < nums.length; i++){
        if((nums[i] & m) == 0){
            //结果为 0 的子数组,一边统计用异或统计x
            x = x ^ nums[i];
        } else {
            //结果为 1 的子数组,一边统计用异或统计y
            y = y ^ nums[i];
        }
    }

    return new int[]{x, y};
}

}

;