今天在连连支付的面试中遇到这样一道题:
在一个成对数组中找出单独的数,例如:
1,1,2,3,2,4,3,5,4
输出:
5
要求时间复杂度为O(N),空间复杂度为O(1)。当时看到这个题目有点懵了,怎么可能空间复杂度为O(1)呢?
后来面试结束后同学告诉我可以用异或的方法求出来,好吧,这个思路真是很难想到。我对与、或、异或运算实在不是很熟悉,所以今天面试结束特地学习一下。
首先讲解一下与、或、异或运算吧,懂的大佬可以直接跳过。
1.与运算(&)
参加运算的两个数据,按二进制位进行“与”运算。
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即:两位同时为“1”,结果才为“1”,否则为0
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1