删除数组中孤立的数据,只保留连续的数据怎么做?比如1 2 3 7 9 10 11 17 19 20 21,得到1 2 3 9 10 11 19 20 21。
#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]对比。