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 (0 == n)
return 0;
int index = 0;
for (int i = 0; i < n; i++)
{
if (mmap.find(A[i]) == mmap.end())
{
mmap.insert(pair<int, int>(A[i], 1));
A[index++] = A[i];
}
else
{
if (mmap[A[i]] == 1)
{
A[index++] = A[i];
mmap[A[i]]++;
}
}
}
return index;
}
map<int, int> mmap;
};
class Solution
{
public:
int removeDuplicates(int A[], int n)
{
if (0 == n)
return 0;
int index = 0;
int pre = A[0];
int count = 1;
for (int i = 1; i < n; i++)
{
if (pre == A[i])
{
if (count++ == 1)
A[index++] = A[i];
}
else
{
A[index++] = A[i];
count = 1;
}
}
return index;
}
};
测试
#include"head.h"
class Solution1 {
public:
int removeDuplicates(int A[], int n)
{
if (0 == n)
return 0;
int index = 0;
for (int i=0;i<n;i++)
{
if (mmap.find(A[i]) == mmap.end())
{
mmap.insert(pair<int, int> (A[i], 1));
A[index++] = A[i];
}
else
{
if (mmap[A[i]] == 1)
{
A[index++] = A[i];
mmap[A[i]] ++;
}
}
}
return index;
}
map<int ,int> mmap;
};
class Solution {
public:
int removeDuplicates(int A[], int n)
{
if (0 == n)
return 0;
int index = 1, pre = A[0], count = 1;
for (int i=1;i<n;pre = A[i++])
{
if (pre == A[i])
{
if (count++ == 1)
{
A[index++] = A[i];
}
}
else
{
A[index++] = A[i];
count = 1;
}
}
return index;
}
};
int main()
{
Solution s;
int A[] = {1,1,1,4,4,4,5,6,7,7,7,8};
int res = s.removeDuplicates(A, 12);
for (int i=0;i<res;i++)
{
cout<<A[i]<<" ";
}
cout<<endl;
}