1、题目:删除有序数组中的重复项
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么?nums?的前 k 个元素应该保存最终结果。
将最终结果插入?nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
2、解题思路
????????需要在原数组的基础上进行原地修改数组,对于这种修改数组元素的题目,我们可以用双指针的方法,当当前元素不等于前一个元素时,将快指针的值给慢指针,由于是当前元素与上一个元素进行比较,所以快指针与慢指针都从1开始。并且当数组中只有一个元素时直接返回1。
3、代码
class Solution
{
public:
int removeDuplicates(vector<int>& nums)
{
int slow = 1;
if (nums.size() == 1)
{
return 1;
}
for (int fast = 1; fast <= nums.size()-1; fast++)
{
if(nums[fast] != nums[fast-1])
{
nums[slow++] = nums[fast];
}
}
return slow;
}
};
|