在一數組中刪除某一特定數據
一 問題描述:
在一個整型數組中刪除某一個特定數據。
二 問題分析:
(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 ;
}
