在C语言中,如何有效地检测和统计数组中存在的重复元素?
时间: 2024-10-28 12:11:22 浏览: 18
在C语言中,检测并统计数组中是否存在重复元素可以采用多种方法,以下是几种常见的做法:
1. **哈希表**(如`unordered_set`或`std::unordered_map`):遍历数组,将每个元素插入哈希表。如果插入失败(即哈希表中已有该元素),说明有重复。同时,可以用哈希表的大小减去原始数组长度得到重复次数。
```c
#include <stdbool.h>
#include <stdlib.h>
size_t count_duplicates(int arr[], size_t n) {
std::unordered_set<int> hash_set;
for (size_t i = 0; i < n; ++i) {
if (hash_set.find(arr[i]) != hash_set.end()) {
return hash_set.size(); // 返回重复次数
}
hash_set.insert(arr[i]);
}
return 0; // 没有重复元素
}
```
2. **排序+遍历**:先对数组进行排序,然后遍历检查是否有相同的连续元素。计数过程中遇到相等的元素则加一,直到元素变化。
```c
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
size_t count_duplicates(int arr[], size_t n) {
qsort(arr, n, sizeof(arr[0]), compare);
size_t duplicates_count = 0;
for (size_t i = 1; i < n; ++i) {
if (arr[i] == arr[i - 1]) {
duplicates_count++;
} else {
duplicates_count = 0; // 清零,从新开始计数
}
}
return duplicates_count;
}
int compare(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
```
阅读全文