解題思路:
首先考慮利用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;
}
};