原题
标签 :
数组 重复元素 有序 双指针 快慢指针
解题思路:
1.判断数组是否为空,为空返回0
2.我们可以放置两个指针 ,其中 k 是慢指针,用来存下所有不同的数,而 j 是快指针用来扫描整个数组。只要 nums[i] ==nums[j],我们就增加 j 以跳过重复项。
当我们遇到 nums[j] 不等于nums[i] 时,跳过重复项的运行已经结束,因此我们必须把它nums[j]的值复制到 nums[k]。然后递增 k,即nums[k++],接着我们将再次重复相同的过程,直到 j 到达数组的末尾为止。
3.慢指针的K的值就是返回的个数。
注意:因为第一个元素前面没有元素,所有需要特判。!i
class Solution {
public:int removeDuplicates(vector<int>& nums) {if(nums.empty())return 0;int k = 0;for (int i = 0; i < nums.size(); i ++ )if (!i || nums[i] != nums[i - 1])nums[k ++ ] = nums[i];return k;}
};