问题描述:给定排序的数组,删除重复的位置,以便每个元素只出现一次。并返回新的长度。
注意:不要为另一个数组分配额外的空间,必须在常量内存中这样做。
例如,给定的输入数组A=[1,1,2],
你的函数应该返回长度=2,而A现在是[1,2]。
分析:由于是排好序的,那么相同的元素必定相邻,所以可以比较相邻元素是否相同,
首先使用一个 i 指向数组的第一个元素,从第二个元素j开始遍历数组,
如果后一个元素和i不同,就将后一个元素复制给 i+1.如果相同则继续遍历下一个元素。
class Fun
{
public:
int Sun(vector<int> &arr)
{
if(arr.empty())
{
return 0;
}
int i = 0;
for(int j = 1;j < arr.size();j++)
{
if(arr[i] != arr[j])
{
arr[++i] = arr[j];
}
}
return i+1;
}
};