什么是异或
对于异或之前在学习的时候有学过,但后来很少用到,恰巧今天在做题的时候发现用异或会变的很简单,同时复杂度会降得特别低,这激起了我对异或的兴趣。
异或运算其实就是两个相同的数异或就是0,然后0和任何数异或得到的结果就是这个数,1和任何数异或得到的都是这个数取反。
1. 0 ^ 1 = 1
2. 1 ^ 0 = 1
3. 1 ^ 1 = 0
System.out.println(1^0);
System.out.println(0^1);
System.out.println(1^1);
执行结果如下:
这就很方便我们在很多有相同数的运算中来操作了。
例如本题:
一个数组中除了某个特定元素只出现一次,其他元素都出现两次。找出该特定元素。
当时我的写法是同HashMap去存储然后去找只出现一次的元素,这样得到结果的复杂度要远大于使用异或。
使用异或的时候只需要一次把所有元素异或,然后得到的结果就是该元素。