### 题目3:数组去重并输出新数组 **描述**:定义一个长度为10的整型数组,输入10个整数(可重复)。编写程序去除数组中的重复元素,并输出去重后的数组。 **注意**:保持元素首次出现的顺序不变。 **示例输入**: ```c++ 请输入10个数字:3 2 5 2 3 8 7 5 9 8 ``` **输出**: ```c++ 去重后的数组为:3 2 5 8 7 9 ``` **解法思路:** - 使用一个辅助数组来保存去重后的结果 - 遍历原数组,对每个元素判断是否已存在于新数组中 - 如果不存在,则加入新数组 c
时间: 2025-07-08 07:46:23 浏览: 7
在C++中实现数组去重并保持元素首次出现的顺序,可以通过引入一个辅助结构来记录已经出现过的元素,同时使用一个额外的数组或容器来保存去重后的结果。这种方法能够确保元素的首次出现顺序被保留,并且重复元素会被跳过。
### 方法说明
1. **使用 `std::unordered_set` 记录已出现的元素**
通过哈希集合快速判断某个元素是否已经存在。
2. **使用 `std::vector` 或数组保存去重后的结果**
保证元素的顺序与原始数组中首次出现的顺序一致。
3. **遍历原始数组**
对于每个元素,如果未出现在集合中,则将其添加到结果数组和集合中;否则跳过。
### C++ 实现代码示例
```cpp
#include <iostream>
#include <vector>
#include <unordered_set>
std::vector<int> removeDuplicates(const std::vector<int>& arr) {
std::unordered_set<int> seen;
std::vector<int> result;
for (int num : arr) {
if (seen.find(num) == seen.end()) {
seen.insert(num);
result.push_back(num);
}
}
return result;
}
int main() {
std::vector<int> arr = {4, 5, 6, 5, 4, 3, 7, 8, 9, 8};
std::vector<int> uniqueArr = removeDuplicates(arr);
std::cout << "去重后的数组(保持顺序): ";
for (int num : uniqueArr) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
### 时间复杂度分析
- **时间复杂度**:O(n),其中 n 是数组长度。每个元素只被访问一次。
- **空间复杂度**:O(n),最坏情况下所有元素都不重复,需要存储所有元素。
### 注意事项
- 如果输入是普通数组而非 `std::vector`,可以先将其转换为向量,或者使用指针进行遍历处理。
- 此方法适用于整型、浮点型、字符型等多种数据类型的数组[^1]。
---
阅读全文
相关推荐
















