题目
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
方法一
简单粗暴的方法
class Solution {public: int removeDuplicates(vector<int>& nums) {
if (nums.size() < 2) return nums.size();
int j = 0;
for (int i = 1; i < nums.size(); i++)
if (nums[j] != nums[i]) nums[++j] = nums[i];
return ++j;
}
};
方法二
用双指针方法
class Solution {public: int removeDuplicates(vector<int>& nums) {
if (nums.size() == 0) //所给数组为空
return 0; auto itr1{ nums.begin() }; //指针1指向第一个元素
auto itr2{ nums.begin() + 1}; //指针2指向第二个元素
for (itr2; itr2 != nums.end(); ++itr2) //过一遍数组
{
if (*itr2 > * itr1) //若s与前一个数不一样
{ itr1 += 1; //指针1向后移动一个元素
*itr1 = *itr2; //修改指针1的值 }
}
return itr1 - nums.begin() + 1; //返回数组长度 }
};