方案一:依次遍历,如果不符合条件则冒泡交换到最后一个位置。o(n^2),结果超时
#include <algorithm>
#include <iostream>
using namespace std;
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 1) {
return 1;
}
int dupNum = 0;
int i = 1;
int pre = nums[0];
while (i < nums.size() - dupNum) {
int now = nums[i];
if (now == pre) {
for (int j = i; j < nums.size() - dupNum - 1; j++) {
std::swap(nums[j], nums[j+1]);
}
dupNum++;
} else {
i++;
}
pre = now;
}
return nums.size() - dupNum;
}
};
方案二:迭代器遍历直接删除。通过✅
在这里插入代码片#include <algorithm>
#include <iostream>
using namespace std;
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 1) {
return 1;
}
vector<int>::iterator ite = nums.begin();
int pre = *ite;
ite++;
while (ite != nums.end()) {
int now = *ite;
if (now == pre) {
ite = nums.erase(ite);
}else {
ite++;
}
pre = now;
}
return nums.size();
}
};