使用c++ 去除数组中所有重复元素 排序,重复数组放在末尾 时间复杂度为1
时间: 2024-10-10 07:07:41 浏览: 46
在 C++ 中,如果你想要去除数组中的重复元素并保持原始顺序(即重复元素放在数组末尾),你可以使用 `std::vector` 和 `std::unordered_set` 的结合,因为 `std::unordered_set` 可以快速检查元素是否存在。这里是一个简单的示例:
```cpp
#include <iostream>
#include <vector>
#include <unordered_set>
// 去除重复元素并保持原顺序的函数
void removeDuplicates(std::vector<int>& nums) {
std::unordered_set<int> uniqueSet;
int j = 0; // 新数组的索引
for (int i = 0; i < nums.size(); ++i) {
if (uniqueSet.find(nums[i]) == uniqueSet.end()) { // 如果元素不在集合中
uniqueSet.insert(nums[i]); // 插入到集合中,并更新新数组的位置
nums[j++] = nums[i]; // 将元素复制到新数组
}
}
// 设置新数组的长度等于 uniqueSet 的大小
nums.resize(j);
}
int main() {
std::vector<int> input = {1, 2, 3, 4, 2, 5, 6, 3};
removeDuplicates(input);
for (const auto& num : input) {
std::cout << num << " ";
}
std::cout << "\n";
return 0;
}
```
这个程序首先创建了一个无序集合 `uniqueSet`,然后遍历输入数组 `nums`,如果遇到的元素不在集合中,就将其添加到集合和新的数组 `nums` 中。最后,根据 `uniqueSet` 的大小调整 `nums` 的长度。
阅读全文