删除排序数组中的重复项
题目要求
给定一个排序数组,你需要用把数组中重复的元素删除,每个元素只出现一次,返回新数组的长度,要求空间复杂度位O(1)。
思路
一快一慢的两个下标,快的用来遍历每一个元素,慢的用来记录新数组的下标,没遍历一个元素就拿来和慢下标的数字进行比较,如果不相同就存到新数组中,相同,快数组继续遍历,直到原数组遍历完。
代码实现
int removeDuplicates(int* nums, int numsSize){
int p = 0;
if (numsSize < 2)
{
return numsSize;
}
for (int i = 1; i < numsSize; i++)
{
if (nums[p] != nums[i])
{
p++;
nums[p] = nums[i];
}
}
return p + 1;
}