在一数组中删除某一特定数据
一 问题描述:
在一个整型数组中删除某一个特定数据。
二 问题分析:
(1)最简单的方法:
遍历数组,发现当前的数据a[i]为特定数据,则将i之后的数据依次前移一个位置,并减少数组的长度。
然后运用相似的办法,依次遍历剩余的数据。
这样的时间复杂度为o(n*n) ,而空间复杂度为o(n)。
(2)简单方法:
内存中维持两个简单变量num表示含有的特定数据的个数,而len则表示数组的长度。
num初始化为0,然后每当判断为特定的数据时,则执行num++,len--。
对于非特定的数据,则执行a[i-num] = a[i],即将之后的数据前移,实现删除功能。
时间复杂度为o(n) ,空间复杂度为o(n)。
三 代码如下:
#include <iostream>
using namespace std;
/**//*
删除数组中的元素5,并将其余元素移动到前方
*/
const int N = 12 ;
int a[N] = {2 ,4 ,5 ,6,3 ,5 ,4 ,5 ,7,2,5,7} ;
int change() //返回改变之后的数组长度
{
int num = 0 ; //统计5个个数
int len = N ; //len表示数组长度。作为返回值
for(int i = 0 ; i < N ;i++)
{
if(a[i] == 5)
{
num++ ;
len-- ;
}
else
{
a[i-num] = a[i] ;
}
}
return len ;
}
int main()
{
int len = change() ;
for(int i = 0 ; i < len ; i++)
cout<<a[i]<<" " ;
cout<<endl ;
getchar() ;
return 0 ;
}