题目描述:
算法思想:从头开始扫描数组,碰到需要删除的元素就直接将其后的元素依次前移一位来覆盖当前位置的元素以达到删除的目的,每删除一次之后除了要把数组长度减一之外,游标 i 的位置也应该回退,以免相邻的重复元素没有删除掉。此外,如果最后一个元素是需要删除的元素,直接将数组长度减一即可。
int removeElement(int* nums, int numsSize, int val)
{
if(numsSize == 0) //若为空,直接返回0
return 0;
for(int i = 0;i < numsSize - 1;i++)
{
if(nums[i] == val)
{
for(int j = i;j < numsSize - 1;j++)
{
nums[j] = nums[j + 1];
}
i--; //为了防止删除后重复元素没删除掉,故要将i回退一位
numsSize--; //移除元素之后数组长度要减一
}
}
if(nums[numsSize - 1] == val) //如果最后以为也是需要删除的元素,直接缩短数组长度即可
numsSize--;
return numsSize;
}