题解 | #序列中删除指定数字#
序列中删除指定数字
https://www.nowcoder.com/practice/7bbcdd2177a445a9b66da79512b32dd7
#include <stdio.h>
int main() {
int n,num,i,j,k=0;
scanf("%d",&n);
int arr[n];
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
scanf("%d",&num);
for(i=0;i<n;i++)
{
if(arr[i]==num)
k++;
else
arr[i-k] = arr[i];
}
for(i=0;i<n-k;i++)
{
printf("%d ",arr[i]);
}
}
看取值范围这道题也可以用一个数组来计数,速度最快。
这道题王道数据结构教材上有类似的题,所以直接就回忆起思路了:
删除数组中所有值为num的元素,只需要遍历每个数,用k记录已经删除的元素个数,然后做如下操作:
如果遍历到num,则k++(逻辑上已经删除了,物理上会被后续元素覆盖)
如果遍历到其他数字,则前移k个位置(相当于你在排队的时候你前面走了3个人,你也要往前走3个位置)

