这题是容易题,但调通竟费了不少周折。
我的方法是用i,j两个指针,i表示返回数组里的最近更新的地方,j用来跟踪重复元素。
记得3种情况要注意:
1) 数组里面重复元素出现的地方超过两次;
2) 数组全是重复元素;
3) 数组里面没有重复元素。
上面3种情况分别对应三个test case。
#include <iostream>
#include <vector>
using namespace std;
int removeDuplicates(vector<int>& nums) {
if (nums.size()==0) return 0;
int i=0, j=1;
while ((i<nums.size()) && (j<nums.size())) {
while((j<nums.size()) && (nums[i]==nums[j])) j++;
if (j<nums.size()) {
if(j!=i+1) {
i++;
nums[i]=nums[j];
j++;
}
else {
i++; j++;
}
}
}
return i+1;
}
int main()
{
//vector<int> a={1,1,2,3,4,5,5,6,8,9};
//vector<int> a={1,1};
vector<int> a={1,2};
cout<<removeDuplicates(a)<<endl;
return 0;
}