对于该类问题而言,与其说是移除数组中的特定元素,不如说是想办法留下数组中符合要求的元素。有了这一点认识之后,就会有如下的解题思路。
创建另外一个数组,定义两个指针同时指向两个数组的开始位置。原始数组的指针向后遍历整个数组,并判断当前遍历到的元素是否符合要求,当原始数组的指针指向的元素符合要求时,将该值赋给新数组的指针指向的位置,然后两个指针同时向后移动一位。反之,原始数组的指针继续向后寻找,新数组的指针由于没有接收到合适的值,因此原地不动。
经历完这一系列的操作之后,新的数组接收的全是符合要求的值,这样就达到了删去数组中特定元素的目的。
1,27. 移除元素 - 力扣(LeetCode) (leetcode-cn.com)
int removeElement(int* nums, int numsSize, int val)
{
int a=0,b=0;
while(a<numsSize)
{
if(nums[a]!=val)
{
nums[b]=nums[a];
b++;
a++;
}
else
{
a++;
}
}
return b;
}
2,26. 删除有序数组中的重复项 - 力扣(LeetCode) (leetcode-cn.com)
int removeDuplicates(int* nums, int numsSize)
{
int a=1,b=1;
while(a<numsSize)
{
if(nums[a]!=nums[a-1])
{
nums[b]=nums[a];
a++;
b++;
}
else
{
a++;
}
}
return b;
}