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]
.
Similar with Remove Duplicates, here use to pointers to track duplicates numbers.
Here array is sorted, if the array is not sorted, we could use hashmap.
Java
public int removeDuplicates(int[] A) {
if(A.length <3) return A.length;
int pre =1, cur =1;
int count =1;
for(cur =1; cur< A.length ;cur++){
if(A[cur] == A[cur-1]){
if(count >=2){
continue;
}
else{
count++;
}
}else{
count = 1;
}
A[pre] = A[cur];
pre++;
}
return pre;
}
c++
int removeDuplicates(int A[], int n) {
if(n < 3) return n;
int pre = 1, cur = 1;
int count = 1;
for(cur = 1; cur< n; cur++){
if(A[cur] == A[cur-1]){
if(count >=2){
continue;
}else{
count++;
}
}else{
count = 1;
}
A[pre] = A[cur];
pre++;
}
return pre;
}