【发布时间】:2020-01-27 12:44:55
【问题描述】:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include "hello_world.h"
using namespace std;
class Solution1 {
public:
int removeDuplicates(vector<int>& nums) {
return distance(nums.begin(), removeDuplicates(nums.begin(), nums.end(), nums.begin()));
}
template<typename InIt, typename OutIt>
OutIt removeDuplicates(InIt begin, InIt end, OutIt output){
while(begin != end){
*output++ = *begin;
begin = upper_bound(begin, end, *begin);
}
return output;
}
};
class Solution2 {
public:
int removeDuplicates(vector<int>& nums) {
vector<int>::iterator output = nums.begin();
while(nums.begin() != nums.end()){
*output++ = *nums.begin();
nums.begin() = upper_bound(nums.begin(), nums.end(), *nums.begin());
}
return distance(nums.begin(), output);
}
};
int main()
{
//helloworld test;
//test.print();
int num[3] = {1,1,2};
vector<int> nums(num, num + 3);
Solution2 so;
int a = so.removeDuplicates(nums);
cout<<a<<endl;
return 0;
}
在 main 函数中,当我使用类 solution1 时,代码可以从数组 [1 1 2] 中删除重复的数字,以输出 [1 2]。为了简化代码,我把解决方案1改成了解决方案2,但是解决方案2不能正确输出,有人知道原因吗?
【问题讨论】:
-
您显示的代码打印单个
int,而不是向量的内容。同样,第一个和第二个变体实际上都没有从向量中删除任何东西。您要删除重复项还是计算它们? -
代码是删除重复并计算它们,我得到了正确的答案,感谢您的关注。
标签: c++ algorithm vector iterator unique