给定一个升序排列的数组nums,请原地删除重复出现的元素,使每个元素只出现一次,返回删除后的数组新长度。元素的相对顺序应保持一致。
要求:返回新数组的长度和数组元素,不能使用额外空间,必须在原数组上进行修改。
例:输入:nums = [1,1,2]
输出: 2, nums = [1,2]
定义两个指针fast和slow,fast表示遍历数组到达的下标位置,slow表示下一个不同元素要填入的下标位置,初始两个指针都指向1,假设数组nums的长度为n,那么fast将遍历1到n-1每一个位置,对于每个位置,当前fast指向的数组元素值若不等于fast前一个指向的数组元素值,那么说明当前fast指向的数组元素与之前数组的元素都不相同,因此将nums[fast]的值赋值给nums[slow],然后把slow的值加一,遍历结束后,slow的值就是新的数组的长度。
int removeDuplicates(int* nums, int numsSize)
{
if (numsSize == 0)
{
return 0;
}
int fast = 1;
int slow = 1;
while (fast < numsSize)
{
if (nums[fast] != nums[fast - 1])
{
nums[slow] = nums[fast];
++slow;
}
++fast;
}
return slow;
}
题目来源于力扣