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]
.
class Solution {
public:
int removeDuplicates(int A[], int n) {
if( n < 2)
return n;
int cnt = 0;
int cur = INT_MIN;
int allow = 1;
for( int i = 0; i < n; ++i){
if( cur == A[i]){
if( allow == 0)
++cnt;
else
--allow;
}
else{
allow = 1;
cur = A[i];
}
}
cur = INT_MIN;
allow = 1;
for( int i = 0, j = 0; i < n - cnt && j < n; ++j){
if( cur == A[j]){
if( allow == 1){
A[i++] = A[j];
--allow;
}
}
else{
allow = 1;
cur = A[j];
A[i++] = A[j];
}
}
return n - cnt;
}
};