看到这题,我想了很久,本来想用set集合做的,然后偷偷看了答案,好家伙,这也太丝滑了吧。
public int singleNumber(int[] nums) {
int res=0;
for (int num : nums) {
res=res^ num;
}
return res;
}
这边用了位运算。
1^1=0;
1^0=1;
0^1=1;
0^0=0;
也就说0和1异或的时候相同的异或结果为0,不同的异或结果为1,根据上面的规律我们得到
a^a=0;自己和自己异或等于0
a^0=a;任何数字和0异或还等于他自己
a^b^c=a^c^b;异或运算具有交换律
有了这3个规律,这题就很容易解了,我们只需要把所有的数字都异或一遍,最终的结果就是我们要求的那个数字。
感觉自己是个铁fw还爱想屁吃 我还是安安心心刷数据结构和算法视频吧。