前言:昨天晚上做蓝桥杯的时候,发现了一道有意思的题目。在网上查找了关于位运算的运用后,发现很有意思,因此决定把他们记录下来。
异或运算的性质:
任何数字异或它自己都等于0;
0异或任何数,等于任何数;
1异或任何数,等于取反任何数。
下面列出几道题目:
1、异或去重
给定大小为n+1的数组,元素大小在[1 : n]之间,只有一个元素会重复出现两次,找到重复的那个元素。 要求,时间复杂度是O(n),空间复杂度是O(1)。
分析:
原数组大小为n+1,其中有一个元素重复了两次(假设为x),那么将该数组与1-1000的所有数字进行异或,则x出现了3次,其他数字只出现了2次。那么该异或得到得结果便是x!
例如下面这段代码(将1000个数据改成了10个,但道理还是一样的哈):
#include <iostream>
using namespace