在一數(shù)組中刪除某一特定數(shù)據(jù)
一 問題描述:
在一個整型數(shù)組中刪除某一個特定數(shù)據(jù)。
二 問題分析:
(1)最簡單的方法:
遍歷數(shù)組,發(fā)現(xiàn)當(dāng)前的數(shù)據(jù)a[i]為特定數(shù)據(jù),則將i之后的數(shù)據(jù)依次前移一個位置,并減少數(shù)組的長度。
然后運用相似的辦法,依次遍歷剩余的數(shù)據(jù)。
這樣的時間復(fù)雜度為o(n*n) ,而空間復(fù)雜度為o(n)。
(2)簡單方法:
內(nèi)存中維持兩個簡單變量num表示含有的特定數(shù)據(jù)的個數(shù),而len則表示數(shù)組的長度。
num初始化為0,然后每當(dāng)判斷為特定的數(shù)據(jù)時,則執(zhí)行num++,len--。
對于非特定的數(shù)據(jù),則執(zhí)行a[i-num] = a[i],即將之后的數(shù)據(jù)前移,實現(xiàn)刪除功能。
時間復(fù)雜度為o(n) ,空間復(fù)雜度為o(n)。
三 代碼如下:
#include <iostream>
using namespace std;

/**//*
刪除數(shù)組中的元素5,并將其余元素移動到前方
*/
const int N = 12 ;

int a[N] =
{2 ,4 ,5 ,6,3 ,5 ,4 ,5 ,7,2,5,7} ;
int change() //返回改變之后的數(shù)組長度

{
int num = 0 ; //統(tǒng)計5個個數(shù)
int len = N ; //len表示數(shù)組長度。作為返回值
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 ;
}
