用C++实现:遍历数组删除其中的重复元素,要求时间复杂度为O(n),空间复杂度为O(1)
时间: 2024-10-19 21:14:23 浏览: 37
【源代码】C++算法(五)一维数组去重(复杂度为n且不新开辟空间)
在C++中,为了遍历数组并删除重复元素,同时保持时间和空间复杂度的要求,我们可以使用一个哈希集合(如`std::unordered_set`)来记录已经遇到过的元素。以下是简单的实现步骤:
```cpp
#include <iostream>
#include <unordered_set>
void removeDuplicates(int arr[], int n) {
std::unordered_set<int> uniqueSet;
for (int i = 0; i < n; ++i) {
if (uniqueSet.find(arr[i]) == uniqueSet.end()) { // 检查元素是否已存在哈希表中
std::cout << arr[i] << " "; // 如果不存在,打印元素
uniqueSet.insert(arr[i]); // 将元素添加到哈希集合中
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 4, 5, 6, 7, 7, 8};
int n = sizeof(arr) / sizeof(arr[0]);
removeDuplicates(arr, n);
return 0;
}
```
在这个例子中,我们遍历整个数组一次,对于每个元素,如果它不在哈希集合中,我们就打印它并将它加入集合。由于哈希集合查找的时间复杂度接近常数(O(1)),所以整体算法的时间复杂度是线性的(O(n))。而哈希集合本身的空间复杂度取决于元素的数量,并不是所有元素都存储了两次,因此空间复杂度保持在O(1),只要保证哈希集合不会过大。
阅读全文