leetcode26: remove duplicates in ordered array
Option 1 : Traverse in sequence, and if the conditions are not met, bubble and swap to the last position. o(n^2), result timeout
#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;
}
};
Option 2 : Direct deletion through iterator traversal. by ✅
在这里插入代码片#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();
}
};