jake1036

在一数组中删除特定数据

  在一数组中删除某一特定数据

 一 问题描述:
     在一个整型数组中删除某一个特定数据。

 二 问题分析:
     (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 ;     
 }


 

posted on 2011-06-29 14:01 kahn 阅读(999) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理