leetcode26: 順序付けられた配列内の重複を削除します
オプション 1 : 順番にトラバースし、条件が満たされない場合は、バブルして最後の位置に切り替えます。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;
}
};
オプション 2 : イテレータ トラバーサルによる直接削除。✅までに
在这里插入代码片#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();
}
};