去重算法模板 : 传入的数组长度>0,返回值为去重后的数组长度。
两种情况:
- 若数组已经
排序
过,则去重相同
元素; - 若
未排序
过,则去重相邻相同
元素
Code :
int unique(int *arrary, int arraySize)
{
int i = 0;
for (int j = 1; j < arraySize; ++j) {
if (array[i] != array[j]) {
i++;
array[i] = array[j];
}
}
return i + 1;
}
解析 : 双指针
不新增内存,在原数组上进行操作得到新数组,指针 i 是新数组标记,指针 j 是对旧数组进行标记处理
采用STL库提供的unqiue/erase函数可以达到同样的效果
nums.erase(unique(nums.begin(), nums.end()), nums.end())