今天刷力扣遇到一道有意思的题目,题目是写着撞色问题177 ,当我写完这个题去看看有什么好的解题方式的时候,看见一个有趣的题解问题,他对这个题目的描述是几对情侣,带几个单身狗出去玩,然后现在我们要把这几个单身狗找出来,看了这个博主的题解,觉得太有意思了,然后今天把这个题写出来分享给大家。
给的是一个接口型,我们只需要把函数实现就行,下面是我分别用C语言和C++实现的两种解题方法,
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* sockCollocation(int* sockets, int socketsSize, int* returnSize) {
int*num=(int *)malloc(sizeof(int)*2);
if(NULL==num)
{
*returnSize=0;
return NULL;
}
int dog1=0,dog2=0,ops=1,i=0,ret=0;
for(int i=0;i<socketsSize;i++)
{
ret^=sockets[i];
}
ops=ret&(-ret);
for(int i=0;i<socketsSize;i++)
{
if(ops&sockets[i])
{
dog1^=sockets[i];
}
else
{
dog2^=sockets[i];
}
}
num[0]=dog1;
num[1]=dog2;
*returnSize=2;
return num;
}
C++题解方式:
class Solution {
public:
vector<int> sockCollocation(vector<int>& sockets) {
int ret = 0;
for (int n : sockets)
ret ^= n;
int div = 1;
while ((div & ret) == 0)
div <<= 1;
int a = 0, b = 0;
for (int n : sockets)
if (div & n)
a ^= n;
else
b ^= n;
return vector<int>{a, b};
}
};