Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
For example,
Given sorted array A = [1,1,1,2,2,3],
Your function should return length = 5,
and A is now [1,1,2,2,3].
思路:需要一个标志位记录当前这个数出现的次数,如果和前面的不相等,肯定得覆盖,并且记录出现了两次,如果和前面相等,那么出现次数多一次,如果出现的次数已经为两次,那么也允许覆盖。
#include <iostream>
#include <vector>
using namespace std;
/*
Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
For example,
Given sorted array A = [1,1,1,2,2,3],
Your function should return length = 5, and A is now [1,1,2,2,3].
*/
int RemoveDuplicate(vector<int>& vec)
{
if(vec.size()<=2)
return vec.size();
int i,flag=1,j;
i =0;
for(j=1;j<vec.size();j++)
{
if(vec[j] != vec[j-1])
{
i++;
vec[i] = vec[j];
flag =1;
}
else
{
flag++;
if(flag==2)
{
i++;
vec[i] = vec[j];
}
}
}
return i+1;
}
int main()
{
int array[]={1,1,2,2,3,4,4,5,6,7};
vector<int> vec(array,array+sizeof(array)/sizeof(int));
cout<<RemoveDuplicate(vec);
return 0;
}Remove Duplicates from Sorted Array II--LeetCode
原文:http://blog.csdn.net/yusiguyuan/article/details/44774857