给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
代码是看别人的(写的很棒,太妙了!),自己写的太啰嗦了,而且不对
于是将别人的代码搬了过来,但给了注释
int removeDuplicates(int* nums, int numsSize){
int len = 0;//先定义数组长度为0
for (int i = 0; i < numsSize; i++) //数列循环
{
if (len < 2 || nums[i] != nums[len - 2]) //这是“||”的用法。当len<2(即i<2),此时直接赋值即可,此时(len-2)<0,无法做出判断;当len>=2,用nums[i]与nums[len-2]比较,nums[len]相当于原数组的重排列,用于排除三个及以上的元素的连续排列
{
nums[len++] = nums[i];//双指针的用法,类似于将原数组重排列
}
}
return len;//返回此时数组长度
}