题目
删除数组中所有值为 x 的元素并压缩
思路
本题删除数组中所有等于 x 的元素,并把剩余元素紧凑到数组前部。
用读下标 r、写下标 w 扫描:若 a[r]!=x 就复制到 a[w++]。结束后有效长度为 w,按题面输出或返回。
解题分析
双指针:i 扫描,j 指向下一个写入位置,不等于 x 的留下。稳定版(保持相对顺序)与非稳定(交换到尾部)按题意选择。
完整程序
#include <stdio.h>
int main(void)
{
int n, x, a[500];
if (scanf("%d", &n) != 1 || n < 0 || n > 500) {
return 1;
}
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
scanf("%d", &x);
int j = 0;
for (int i = 0; i < n; i++) {
if (a[i] != x) {
a[j++] = a[i];
}
}
for (int i = 0; i < j; i++) {
printf("%d%c", a[i], i + 1 < j ? ' ' : '\n');
}
return 0;
}
运行示例
输入:
6
1 2 3 2 4 2
2输出:
1 3 4