简单的算法问题3——元素移除

xiaoxiao2021-02-28  109

简单的算法问题3——元素移除

以下题目全是用c++写的… 以下算法题均来自计蒜客

题目

给定一个数组和一个数(该数不一定在数组中),从数组里删掉这个数字,返回剩下的数组长度。 如:A[] = {1, 2, 3, 4, 5}A[]=1,2,3,4,5,要删除数字 3,那么返回数组长度为 4。 亲爱的小伙伴们,题目是不是很简单呢? 提示:int removeElement(int A[], int n, int elem) 其中,n代表数组长度,elem代表要删掉的元素。

输入格式

第一行输入一个数 n(1≤n≤100), 接下来一行 n 个整数,表示数组 A的所有元素A (0≤A≤100), 接着输入要删除的元素elem(0≤elem≤100)。

输出格式

形如:

输出一个整数,表示剩余数组长度。

输入

2 3 3 3

输出

0

刨坑点

1.这道题怎么说来着,就是线性表的删除,但是呢,个人觉得有点坑,因为如果是我们删除最后一个线性表元素呢?你还用for(int j=n-1;j>-1;j--) {A[j]=A[j+1];n--;} 前提是我是取到n的值以后才去创建的A数组,n就代表了数组的MaxSize,如果你第1次要删除的是最后一个元素。还有你最后一个元素和倒数第二个元素相同的时候,你怎么思考呢?我个人呢,采用了不作为的态度,直接暴力解决,if(A[i]==elem){A[i]=NULL;n--;}

2.这道题如果用C++中的vector做的话超级简单,还不用考虑那么多…

代码

#include <iostream> using namespace std; int removeElement(int A[],int &n, int elem); int main(){ int n; int elem; cin>>n; int *A=new int[n]; for(int i=0;i<n;i++){ cin>>A[i]; } cin>>elem; cout<<removeElement(A,n,elem); return 0; } int removeElement(int A[],int &n,int elem){ if(n>0&&n<101){ for(int i=n-1;i>-1;i--){ if(A[i]>-1&&A[i]<101){ while(A[i]==elem){ A[i]=NULL; n--; } } } return n; } }

测试成功~!

转载请注明原文地址: https://www.6miu.com/read-62720.html

最新回复(0)