题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
解答思路:
1、这里我首先定义了一个指针temp指向nums数组,分别三个int变量num、count、i分别用来遍历数组,记录删除后当前数组元素个数。
2、将num和count初始化为0是为了将数组第一个元素直接赋值到temp,方便后面的遍历。
3、依次遍历数组,如果对当前元素和前一个元素相等,并且次数小于2,就赋值到temp,并i++,往后遍历。(这里之所以判断条件i < 2是因为,我们是将元素第一次出现赋值到temp后,才将i变成1,再次出现时判断时i = 1,满足条件,第三次出现时i的值为2 )
4、当前元素和前一个不相等,说明第一次出现,将i变为初始值1,接着往后遍历
解答代码:
int removeDuplicates(int* nums, int numsSize) {
int* temp = nums;
int num = 0;//用来遍历数组
int count =0;//删除后元素个数
int i = 1;//用来记录重复次数
temp[count++] = nums[num++];
while(num < numsSize)
{
if(nums[num] == nums[num - 1] && i < 2)
{
temp[count++] = nums[num++];
i++;
continue;
}
if(nums[num] != nums[num - 1])
{
temp[count++] = nums[num++];
i = 1;
continue;
}
num++;
}
return count;
}
问题记录:
没有搞清判断条件里的i的判断条件,一度写为i < 3,导致后面调试多次无法通过