删除孤立的数据,只保留连续的数据

删除数组中孤立的数据,只保留连续的数据怎么做?比如1 2 3 7 9 10 11 17 19 20 21,得到1 2 3 9 10 11 19 20 21。

http://zhidao.baidu.com/link?url=lNHw9zw0qNoXD-41mQNsXZ4-mIzs3GFXvh9kwrfg5SOsK7THEOqNGlY2yrhijBOr4stLRjbDrL5G-FS_inD658cLi2NYP44QvPGdWMqX9Iu

#include
#include
using namespace std;

struct Array
{//这里只是取了begin和end,反正是连续的,节约内存,用的时候加数字就是了,还可以写个函数在里面加,像数组一样,甚至重载操作符,当然也可以new来分配大小,感觉没必要了
int begin;
int end;
};

void main()
{
int a[]={1,2,3,4,6,7,8,10,11,12,15,16,33};
vector aVector ;

int size =sizeof(a)/sizeof(int);
Array aa={0};
for (int i = 0; i < size; ++i) {
    aa.begin = a[i];
    while(i < size-1 && a[i+1] == a[i] +1)
        i++;

    aa.end = a[i];
    aVector.push_back(aa);
}
//输出,这里也可以for(int i=0;i<aVector.size();i++)然后.at取出来,效率问题,还可以用foreach
for (vector<Array>::iterator iter = aVector.begin(); iter != aVector.end(); iter++) {
    for (int i= iter->begin; i <= iter->end; ++i) {
        cout<<i<<"  ";
    }
    cout<<endl;
}

}

遍历数组判断 该数是否为前一个数加一 或者后一个数减一 ,是就保存进另一个数组

 var a=[1,2,3,7,9,10,11,17,19,20,21];
var b=[];
for(var i=0;i<a.length;i++){
    //判断第一个是否连续第二个 
    if(i==0 && a[i]==a[i+1]-1){
        b.push(a[i])
    }else if(a[i]==a[i-1]+1 || a[i]==a[i+1]-1){
        b.push(a[i])
    }
}

遍历元素,让arr[i]和arr[i-1],arr[i+1]对比。