删除有序数组的重复项
26. 删除有序数组中的重复项 - 力扣(LeetCode)
#include<stdio.h>
int main()
{
int nums[10] = { 1,2,2,2,4,6,8,8,9};
int numsSize = sizeof(nums)/sizeof(int);
if (numsSize == 0)
{
return 0;
}
int fast = 1, slow = 1;
while (fast < numsSize)
{
if (nums[fast] != nums[fast - 1])
{
nums[slow] = nums[fast];
++slow;
++fast;
}
else
{
++fast;
}
}
for (int i = 0; i < slow; i++)
{
printf("%d ", nums[i]);
}
return slow;
}
为什么快慢指针为1?为什么不让快指针为0,让自己指向的项与后一项相比,不同的话赋给慢指针?
其实一样slow为1,fast为0,
int fast = 0, slow = 1;
while (fast < numsSize)
{
if (nums[fast] != nums[fast + 1])
{
nums[slow] = nums[fast+1];
++slow;
}
++fast;
}
效果相同,应该也可以
思路:快指针前一项与自己指向的项不同时将后一项的值给慢指针,慢指针++,快指针++;
如果相同,快指针++;快指针需要遍历数组;
1,4为快指针与前一项不同的情况 ,2,3为相同的情况;后面以此类推
考虑特殊情况数组大小为0
太难了,导致我拖了好几天的学习进度[哭];
可以看看力扣里面的视频讲解