简单的算法问题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;
}
}
测试成功~!