今天做了一道题:给定一个整形数组,找出其中出现次数为奇数次数的数(一定有且只有一个)。例如:{20,1,-1,2,-2,3,3,5,5,1,2,4,20,4,-1,-2,5}得到 5。
我的思路是写一个map集合,key为数组中的数,value为出现次数,然后找出其中value为奇数的key就可以了。
之后看了其他人的方法。
呃,瞬间感觉自己智商收到了侮辱。。。。。。。。。
异或运算,我一直知道其原理,但是不知道怎么用。
所以查了一下,给自己做个笔记:
异或运算的3个特点:
(1) 0^x = x 0异或任何数=任何数
(2) 1^x = -x 1异或任何数 = 任何数取反
(3) x^x = 0 任何数异或自己=把自己置0
异或运算的常见用途:
(1) 实现两个值的交换,而不必使用临时变量。这是排序中常用的。
a=1, b=2
{ a=a^b; b=b^a; a=a^b; }
结果为 a=2,b=1
(2) 比较两个值是否相等
a^b==0, 如果为true则a和b相等
(3) 加密和解密(也是题目中用到的)
如果:a^x=y;
则: y^x=a;