前言:有时候我们会遇到要在数组中删除指定元素,但是不能创建新的数组,那么这个时候应该如何操作呢?
✨✨✨这里是秋刀鱼不做梦的BLOG
✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客
废话不多讲,让我们直接开始~
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 在原地等待。
当然此问题有许多解决方案,以上只是讲解了其中一种,其余方案读者可以自己思考。
以上就是该问题的所有讲解了~~~