给定含有 nn 个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。C++
时间: 2024-10-19 22:12:18 浏览: 37
在C++中,你可以使用`std::vector`和`std::set`结合的方式来解决这个问题。`std::set`是一个无序的集合,它自动去除重复元素,并且保证插入顺序与元素值的大小无关(对于自增顺序)。首先将序列复制到`std::set`中,由于`set`不允许重复,这一步就实现了去重。然后从`set`中取出元素并重新插入到`std::vector`中,按照原序列的索引顺序。
这是一个简单的示例:
```cpp
#include <vector>
#include <set>
void removeDuplicates(std::vector<int>& nums) {
std::set<int> uniqueSet;
for (size_t i = 0; i < nums.size(); ++i) {
if (uniqueSet.find(nums[i]) == uniqueSet.end()) {
// 如果元素不在set中,说明是第一次出现,将其添加到set和vector中
uniqueSet.insert(nums[i]);
nums[i] = i; // 更新vector中的位置,保留原始顺序
}
}
}
// 示例
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5, 2, 6, 7, 8, 1};
removeDuplicates(nums);
// 输出:[0, 1, 2, 3, 4, 5, -1, 6, 7, 8]
// 注意:最后的两个位置(即原本的2和1的位置)被设为了-1,因为它们已经被去重了
}
```
在这个例子中,注意`nums`数组的最后一个元素会变成未初始化的值,因为你需要预留空间给新的元素,所以在实际应用中可能会选择其他方式处理空位,例如设为特殊值 `-1` 或 `std::numeric_limits<int>::max()`。
阅读全文