问题描述:
给你一个数组nums和一个值,你需要原地移出所有数值等于val的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用0(1)并原地修改输入数组
解决思路:
本题用函数解决:本题对于空间复杂度和时间复杂度均有要求,这里我们考虑用双指针实现,用str代表遍历数组的下标,dst表示去除元素后新的数组的下标,当str指向的不是要删去的元素时,将str指向的元素赋给dst(相当于对数组存放新的数据),str++,des++,当str指向要删去的元素时,str++,dst不变,最终留下的即为删去指定数字之后的数字。
函数代码如下:
//去除某些元素自定义函数
//val为要去除的元素
int removeElement(int* nums, int numsSize, int val)
{
int src = 0;
int dst = 0;
while (src < numsSize)
{
if (nums[src] != val)
{
nums[dst++] = nums[src++];
}
else
{
src++;
}
}
return dst;
}