删除有序数组中的重复项
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插入 nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
解题思想:
完整代码:
#include<stdio.h>
int removeDuplicates(int nums[], int sz)
{
int des = 0, cur = 1;
while (cur < sz)
{
if (nums[des] == nums[cur])
{
cur++;
}
else
{
nums[++des] = nums[cur++];
}
}
//des是下标,我们要返回的是元素个数,所以是des+1
return des + 1;
}
int main()
{
int nums[] = { 0,0,1,1,1,2,2,3,3,4 };
int sz = sizeof(nums) / sizeof(nums[0]);
int ret = removeDuplicates(nums, sz);
for (int i = 0; i < ret; i++)
{
printf("%d ", nums[i]);
}
return 0;
}
做题的时候,我们最好先画图,有了思路,就可以把题目做出来了。
有不理解的小伙伴欢迎留言,然后留下小爱心🤭