给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插入 nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array
本题目采用双指针法,在力扣评论区看到这样一段话非常有意思,可以帮助我们理解这个双指针法:
双指针法 (C++)
双指针法在数组、链表题目中都有很大的用处。
class Solution {
public:
int removeDuplicates(vector<int>& nums)
{
int fast = 1;//快指针
int slow = 0;//慢指针
if(nums.size()==0)
return 0;
for(fast = 1;fast<nums.size();fast++)//注意C++容器中是.size()获得容量,没有.length()
{
if(nums[fast]!=nums[slow])
{
slow++;
nums[slow]=nums[fast];//一定注意是先slow++后再赋值,然后fast++
}
}
return slow+1;//长度 = 下标+1
}
};