#include <stdio.h>
int delMin(int *arr, int len, int s, int t) {
int j = 0, n = 0;
if (s > t || len == 0)
return 0;
// 计算删除元素的数量
for (int i = 0; i < len; i++) {
if (arr[i] >= s && arr[i] <= t) {
j++;
} else if (arr[i] > t) {
n++;
}
}
// 移动后面的元素到前面
int r = len - j - 1;
/* 我开始是使用len-j-n-1,想从第一个开始移动,后来报错,我也不想调试了,发现直接从最末尾减去j,得到的恰好是修改后数组的最后一个值,然后可以直接减法,倒着减回去正好对上了 */
int h = len - 1;
if (arr[len - 1] <= t) {
len = len - j;
} else {
while (n--) {
arr[r--] = arr[h--];
}
len = len - j;
}
return len;//这里可以修改数组长度,注意不要用指针,直接返回就能了
}
int main() {
int n = 7;
int arr[] = {1, 2, 3, 4, 5, 6, 7};
int s = 2;
int t = 4;
n = delMin(arr, n, s, t);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
删除指定范围数组
最新推荐文章于 2024-07-15 22:10:26 发布