网站建设上传宝贝xamp,便利的广州微网站建设,diy电子商城网站,阿里云 拦截网站文章目录1、异或运算符的运算1、异或运算符的运算
问题描述#xff1a; 给出一个指定的数组#xff0c;只有一个数出现一次#xff0c;剩下都出现两次#xff0c;找出出现一次的数字。指定数组为[1,2,2,1,3,4,3]。 样例输出#xff1a;4
#includeiostream
using…
文章目录1、异或运算符的运算1、异或运算符的运算
问题描述 给出一个指定的数组只有一个数出现一次剩下都出现两次找出出现一次的数字。指定数组为[1,2,2,1,3,4,3]。 样例输出4
#includeiostream
using namespace std;
int main(){int a[7]{1,2,2,1,3,4,3};int ans0;for(int i0;i7;i){ans^a[i];}coutans;return 0;
}为什么可以这样得出只出现一次的数字呢
首先大家要先知道异或是个啥 异或异或其实就是异不同的时候结果为1同时结果为0 比如1和0异或结果就是10和1异或结果也是1 1和1异或结果是00和0结果也是0
首先我们循环遍历整个数字每个数字只需要遍历一次 ans的初始值是0我们知道0与任何数异或都等于任何数本身 所以我们这个for循环其实就是把所有数组里的每一个元素进行了异或也就是1 ^ 2 ^ 2 ^ 1 ^ 3 ^ 4 ^ 3 我们利用异或运算满足交换律、结合律 也就是不管1和1有没有挨在一起都能得到(1^1) ^ (2 ^ 2) ^ (3 ^ 3) ^ 4 再者对于任何数a都有a^a0 所以(1^1) ^ (2 ^ 2) ^ (3 ^ 3) ^ 4其实就等于0 ^ 4也就是4 完美撒花