c实现一个有序数组,找出其中元素的重复项是相同元素至多出现一次返回剔除重复元素之后的数组。
时间: 2024-09-15 12:12:09 浏览: 84
在C语言中,你可以通过使用哈希表(如`unordered_set`)来实现这个功能。这里是一个简单的示例,它首先遍历输入数组,然后将每个元素添加到哈希表中。由于哈希表不允许重复元素,如果遇到已存在的元素,则表示该元素是重复的。最后,我们将哈希表转换回数组并删除重复项,得到的结果就是去重后的有序数组。
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unordered_set>
// 使用哈希表存储元素,结构体作为键
typedef struct {
int value;
} Item;
// 比较函数用于排序
bool compare(const void *a, const void *b) {
return ((Item *)a)->value < ((Item *)b)->value;
}
// 删除重复项并保持顺序
void removeDuplicates(int* arr, int n, int* result) {
// 创建哈希表
unordered_set<Item> hashTable;
// 遍历原数组,加入哈希表并记录下标
for (int i = 0; i < n; ++i) {
Item item = {arr[i]};
if (hashTable.find(item) == hashTable.end()) {
// 如果元素未存在,将其添加到结果数组和哈希表中
hashTable.insert(item);
result[i] = arr[i];
}
}
// 对结果数组按照升序排列
qsort(result, n, sizeof(Item), compare);
// 输出去重后的数组长度
printf("去重后的数组大小: %d\n", n);
}
int main() {
int input[] = {1, 3, 2, 3, 4, 5, 6, 7, 8, 9, 2, 1};
int size = sizeof(input) / sizeof(input[0]);
int result[size]; // 结果数组假设足够大
removeDuplicates(input, size, result);
printf("去重后的数组: ");
for (int i = 0; i < size; ++i) {
printf("%d ", result[i]);
}
printf("\n");
return 0;
}
```
阅读全文