[问题描述]:如何使用O(1)空间,删除数组中的重复元素?比如A=1111222334566,删除之后就是123456。也就是模仿STL的unique()。
使用三个指针:p,q,r。r表示当前处理的位置,区间[p,q)表示重复元素的范围(左开右闭)。每次将[p,q)的第一个元素(也就是*p)赋给r,然后继续处理下一个重复元素区间,直到数组全部处理完毕。
#include <iostream>
using namespace std;
template <typename T>
T* Unique(T *first, T *last){
T *p, *q, *r;
for(r = p = q = first; r != last && p != last; r++){
*r = *p;
while(*q == *p){
++q;
}
p = q;
}
return r;
}
int main()
{
char s[100] = "1111222334566";
char *p = Unique(s, s + strlen(s));
*p = 0;
cout<<s<<endl;
cout<<p-s<<endl;
return 0;
}