非常抱歉,我的回答有误。std::unique只会在已排序的范围内去除相邻的重复项,并将它们移动到容器末尾,并不会删除剩余的重复项。正确的代码应该是:
nums.erase(unique(nums.begin(), nums.end()), nums.end());
这样可以使用返回值来确定新的逻辑结尾位置,并通过vector.erase()函数来擦除剩余的重复项。
以下是修正后的示例代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> removeDuplicates(vector<int>& nums) {
sort(nums.begin(), nums.end()); // 先对数组进行排序
nums.erase(unique(nums.begin(), nums.end()), nums.end()); // 去除相邻的重复项并擦除剩余重复项
return nums;
}
int main() {
vector<int> nums = {1, 2, 3, 4, 5, 3, 2};
vector<int> result = removeDuplicates(nums);
for (const auto& num : result) {
cout << num << " ";
}
cout << endl;
return 0;
}
再次对之前给出的错误表示抱歉,感谢指出!
内容由零声教学AI助手提供,问题来源于学员提问




