目录
一、题目
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插入 nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
二、题解
dst从0开始,src从1开始,当 src指向的内容与dst相同时,src往后挪,当src指向的内容和dst不同时,dst往后挪一位,再将src指向的内容赋给dst,因为dst是下标,所以最后返回新数组大小应为dst+1。
#include <stdio.h>
int removeDuplicates(int* nums, int numsSize)
{
int dst = 0;
int src = 1;
while (src < numsSize)
{
if (nums[src] == nums[dst])
{
src++;
}
else
{
nums[++dst] = nums[src++];
}
}
return dst + 1;
}