我的解法:循环检测重复的数字,如果相同删除,同时循环位置减一
int removeDuplicates(vector<int>& c) {
if(!c.size()) return ;
for(int i=0;i<c.size()-1;i++){
if(c[i]==c[i+1]){
c.erase(c.begin()+i);
i--;
}
}
return c.size();
}
解法一:使用unique函数
int removeDuplicates(vector<int>& nums) {
nums.erase(std::unique(nums.begin(),nums.end()),nums.end());
return nums.size();
}
unique()是C++标准库函数里面的函数,其功能是去除相邻的重复元素(只保留一个),所以使用前需要对数组进行排序
unique的作用是“去掉”容器中相邻元素的重复元素,它实质上是一个伪去除,它会把重复的元素添加到容器末尾,而返回值是去重之后的尾地址(是地址!!)
解法二:return 语句写的不错,nums 不应该resize一下吗?
int removeDuplicates(vector<int>& nums) {
int i = 0; int t = 0;
while(++t < nums.size())
{
if (nums[t] != nums[i])
{
++i;
if(i != t)
nums[i] = nums[t];
} }
return i + 1 <= nums.size() ? i + 1 : 0;
}