今天刷力扣遇到一道有意思的题目,题目是写着撞色问题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;elseb ^= n;return vector<int>{a, b};}
};