在整型数组r[n]中删除所有值为x的元素,要求时间复杂度为O(n),空间复杂度为O(1)用c语言编写程序
时间: 2024-09-23 07:06:13 浏览: 50
在C语言中,我们可以采用双指针的方法,一个指针i从数组开头开始遍历,另一个指针j用于记录有效元素的位置。如果遇到值不为x的元素,就将它移动到当前有效位置并更新指针i。以下是具体的实现:
```c
#include <stdio.h>
void removeX(int r[], int n, int x) {
if (n == 0 || r[0] != x) { // 如果数组为空或第一个不是x,则直接复制
for (int i = 0; i < n; i++) {
r[i] = r[i];
}
} else {
int j = 0;
for (int i = 0; i < n; i++) {
if (r[i] != x) {
r[j++] = r[i]; // 移动非x元素到新位置
}
}
r[j] = 0; // 最后填充0结束,实际不需要,这里是示意
}
}
// 测试函数
int main() {
int arr[] = {1, 2, 3, 4, 5, 5, 6};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 5;
removeX(arr, n, x);
printf("Array after removing %d: ", x);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
这个程序的时间复杂度是O(n),因为我们需要遍历整个数组一次。空间复杂度是O(1),因为我们只使用了常数级别的额外空间。
阅读全文