如果你有一组数据,其中只有一个数字出现了一次,而其他所有数字都是成对出现的,你可以使用异或运算来找出这个数字。异或运算有一个重要的性质:任何数和它自己异或的结果是0,任何数和0异或的结果是它自己。因此,如果我们将数组中的所有数字进行异或运算,最终的结果就是那个唯一出现一次的数字。
```c
include
int main() {
int arr[] = {1, 5, 5, 1, 7, 6, 7, 8, 8, 9, 9};
int i = 0;
int len = sizeof(arr) / sizeof(arr);
int result = arr; // 初始化结果为数组的第一个元素
// 对数组中的每个元素进行异或运算
for (i = 1; i < len; i++) {
result ^= arr[i];
}
printf("The single number is: %d\n", result);
return 0;
}
```
在这个例子中,我们首先将`result`变量初始化为数组的第一个元素。然后,我们遍历数组中的每个元素,并将`result`与每个元素进行异或运算。由于成对的数字会相互抵消,最终`result`中存储的就是那个唯一出现一次的数字。
这种方法的时间复杂度是O(n),其中n是数组的长度,因为我们只需要遍历数组一次。这种方法的空间复杂度是O(1),因为我们只使用了一个额外的变量来存储结果。