赞
踩
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
作为萌新,我第一遍做的时候,我的思路就是再创建一个新数组。
将原来的数组的第一个元素放进去,然后拿原来数组中元素与新数组中的元素比较,不同就放进去,相同就不放进去。
这样新数组就会是一个没有重复的数组。
但是后来我才发现,人家需要原地删除,即用指针。
双指针其实就是一个快指针,一个慢指针。
快指针其实我们可以看成我上面说的旧数组,慢指针看成新数组。
如果快指针与慢指针的元素相同,快指针往后移动,慢指针不动。
当快指针与慢指针不同时,这就是我们需要加进去的元素。
慢指针移动一位,并且元素变为快指针的元素。
以此类推
最后返回新数组的大小。
int removeDuplicates(vector<int>& nums) {
if(nums.size() == 0) return 0;
int i = 0;
for(int j = 1;j < nums.size();j++)
{
if(nums[j] != nums[i])
{
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
刚开始学习C++难免会有一些错误,请各位大佬指出。
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。