1.题目描述
先让我来看一下题目描述:
有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后数组中的元素,序列中未被删除数字的前后位置没有发生改变(不可以创建新的数组)。
我们用图来大体理解一下要求:
现在我们就大体理解了题目的要求。
2.题目讲解
了解完了题目的意图,现在我们就对其进行讲解,首先我们先大致了解一下解题思路:
1.要删除数组中的指定数据,我们就需要对数组进行遍历操作;
2.不能创建新的数组,那么我们只能在原数组上进行修改操作;
解题代码如下:
#include<stdio.h> int main() { //原数组 int arr[] = { 1,2,3,4,5,6,6,7,8,9,10 }; //要被删除元素 int deleteNumber = 6; int i = 0; int j = 0; //求出原数组长度 int sz = sizeof(arr) / sizeof(arr[0]); //遍历数组 for (i = 0; i < sz; i++) { //判断是否是所要删除的元素 if (arr[i] != deleteNumber) { arr[j] = arr[i]; j++; } } //打印修改后的数组中的数据 for (int k = 0; k < j; k++) { printf("%d ", arr[k]); } return 0; }
对于以上代码中的难以理解点,我们现在进行解释:
在上面的代码中,我们创建了 i 和 j 两个变量,其中 i 变量是用来进行遍历数组的,而 j 变量是用来修改数组数据的,或者说是用来刷新原数组中的数据的;
简单来说 i 就是用来遍历整个数组,检查对应索引位置元素是否是目标元素,如果不是赋值给 j 位置,如果是则跳过该位置元素,而 j 在原地等待。
当然此问题有许多解决方案,以上只是讲解了其中一种,其余方案读者可以自己思考。
以上就是该问题的所有讲解了~~~