做题链接:力扣
题干:
做题思路:
1.从前向后依次遍历
2.遇到要删除的直接向前覆盖
3.将尾值替换为'\0',便于返回数组时直接停止
4.每次覆盖完后记得长度自减一
注意:
这里的细节在于查重,覆盖后不能继续向后,应当在未覆盖前的位置重新开始向后遍历
图解分析
代码如下
注意看代码中的注释必要的话和图解一起理解
做题时要注意越界问题,查重过程,返回时的思想。
int removeElement(int* nums, int numsSize, int val){
for(int i=0;i<numsSize;i++)
{
if(nums[i]==val)
{
//依次向前覆盖
for(int j=i;j<numsSize-1;j++)
{
nums[j]=nums[j+1];
}
//这里是i--查重,防止下一位紧挨着的跳过去
//应从原起点起步
i--;
//最后一位'\0'替换,数组长度就-1
nums[numsSize-1]='\0';
numsSize--;
}
}
return numsSize;
return nums;
}
Leetcode题解链接:
力扣 27移除数组
欢迎大家点赞评论噢,谢谢支持!!!
版权归原作者 i跑跑 所有, 如有侵权,请联系我们删除。