解题思路:
首先考虑利用vector容器自身提供的erase方法。使用一个历史变量保存上一个浏览过的元素,当前访问元素与历史记录不同时向前移动指针否则删除指针。但这种方法效率较低。考虑换一种写法,可以不使用容器提供的方法,效率还可以更快。
解题代码一:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int len = nums.size();
if(len==0) return 0;
int his = nums[0];
int cnt = 1;
for(auto it=nums.begin()+1;it!=nums.end();){
if(*it==his)
nums.erase(it);
else{
his = *it;
++it;
}
}
return nums.size();
}
};
解题代码二:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int len = nums.size();
if(len<2) return len;
int ix = 1;
for(int i=1;i<len;i++){
if(nums[i]!=nums[i-1]){
nums[ix++] = nums[i];
}
}
return ix;
}
};