移除元素
问题描述
给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
示例
输入:nums = [3,2,2,3], val = 3 输出:2, nums = [2,2] 输入:nums = [0,1,2,2,3,0,4,2], val = 2 输出:5, nums = [0,1,4,0,3]
解题思想:设置两个变量i,j。当i指向的值不等于val时,将i指向的值赋值给j的位置,j的指向++,当i指向的值等于val时,i的指向++。
图解:
代码实现:
int removeElement(int* nums, int numsSize, int val)
{
if (numsSize == 0)
{
return 0;
}
int i = 0, j = 0;
for (i = 0; i < numsSize; i++)
{
if (nums[i] != val)
{
nums[j] = nums[i];
j++;
}
}
for (int k = 0; k < j; k++)
{
printf("%d ", nums[k]);
}
printf("\n");
return j;
}
结果如下: