用 c 语言编写,在数组中找一个只出现一次的数
时间: 2024-10-19 08:05:58 浏览: 14
在C语言中,要在一个数组中找到只出现一次的数,可以使用哈希表(如标准库中的`std::unordered_map`)或者通过遍历数组并记录每个元素的出现次数来实现。这里我们提供一个简单的线性时间复杂度O(n)的解决方案,即使用一个计数数组:
```c
#include <stdio.h>
// 使用一个额外的数组来存储每个元素出现的次数
int* count_elements(int arr[], int size, int* result) {
int count[size], temp;
for (int i = 0; i < size; i++) {
if (arr[i] != -1) { // 如果元素未被标记,则更新计数
count[arr[i]]++;
} else { // 如果元素已经被标记(值为-1),则它是唯一出现一次的数
temp = arr[i];
while (temp != -1) {
arr[temp] = -1; // 标记这个元素以便后续查找
temp = count[temp]; // 跟随计数值移动
}
*result = temp;
return arr;
}
}
// 如果所有元素都出现了两次,返回NULL
return NULL;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 2, 1};
int size = sizeof(arr) / sizeof(arr[0]);
int unique_num;
arr = count_elements(arr, size, &unique_num);
if (arr == NULL) {
printf("No unique element found.\n");
} else {
printf("The unique element is: %d\n", unique_num);
}
return 0;
}
```
在这个例子中,数组中的初始值为`-1`表示该位置未处理过。程序会遍历数组,对于每个未标记的元素,将其计数加一;当遇到已标记的元素时(值为`-1`),它就是唯一出现一次的数。当遍历结束后,如果没有找到唯一元素,函数会返回`NULL`。
阅读全文