这个问题类似于我之前遇到的,一组数据中只有一个数字出现了一次,其他所有数字都是成对出现的,请找出这个数字,参考这个过程解决此问题。
分析:只有两个数字出现了一次其他成对出现,可以首先将这个数组连续异或,得到的结果就是这两个只出现一次数异或后的结果。
目前数组arr{1, 2, 3, 3};3与3异或后为0,因此连续异或的结果就为1与2疑惑后的结果。接下来从左至右移位找为1的二进制位,用该为是否为1作为判断条件将数组分为两组在此连续异或,得出的两个结果就是两个只出现一次的数字
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int ContinuousXor(int *arr, int sz)
{
int ret = 0;
for (int i = 0; i < sz; i++