移除元素
题目描述
思路
思路:定义两个指针变量指向数组第一个位置,判断nums[scr]是否等于val
case1:相等,scr++;
case2:不相等,nums[dst]=nums[scr],scr++,dst++;
时间复杂度:O(n);空间复杂度:O(1);
画图解释
1.定义两个指针变量指向数组第一个位置
2.判断nums[scr]是否等于val
相等,scr++
不相等,nums[dst]=nums[scr],scr++,dst++;
此时,src跳出了循环,dst指向的是数组下标为2的位置,而我们当前要返回数组的有效数据个数是2,那我们直接返回dst就好了。注意,我们的结束条件是src要小于我们的数组长度。
完整代码
int removeElement(int* nums, int numsSize, int val)
{
int str=0,dst=0;
while(str<numsSize)
{
if(nums[str]==val)
{
str++;
}
else
{
nums[dst]=nums[str];
str++;
dst++;
}
}
//此时dst指向的位置就是要返回的个数
return dst;
}