JavaScript实现找出数组中最长的连续数字序列
原始题目:
给定一个无序的整数序列,找最长的连续数字序列。
例如:
给定[100,4,200,1,3,2],
最长的连续数字序列是[1,2,3,4]。
小菜给出的解法:
functionmaxSequence(array,step){
var_array=array.slice(),//clonearray
_step=1,
_arrayTemp=[],
i=0;
varparseLogic={
//resultcontainer
parseResults:[],
//setvaluetoarray,what'sthelastarrayofparseResults
set:function(n){
this.parseResults[this.parseResults.length-1].push(n);
},
//getthelastarrayfromparseResults
get:function(){
returnthis.parseResults[this.parseResults.length-1];
},
//putanewarrayinparseResults
addItem:function(){
this.parseResults.push([]);
},
//sortparseResults
sortByAsc:function(){
this.parseResults.sort(function(a,b){
returna.length-b.length;
});
}
};
//checkparams
_step=step||_step;
//sortarraybyasc
_array.sort(function(a,b){
returna-b;
});
//removerepeatofdata
for(i=0;i<_array.length;i++){
if(_array[i]!=_array[i+1]){
_arrayTemp.push(_array[i]);
}
}
_array=_arrayTemp.slice();
_arrayTemp=[];
//parsearray
parseLogic.addItem();
for(i=0;i<_array.length;i++){
if(_array[i]+_step==_array[i+1]){
parseLogic.set(_array[i]);
continue;
}
if(_array[i]-_step==_array[i-1]){
parseLogic.set(_array[i]);
parseLogic.addItem();
}
}
//sortresult
parseLogic.sortByAsc();
//getthemaxsequence
returnparseLogic.get();
}
调用说明:
方法名称:
maxSequence(array,step)
参数说明:
array:要查找的数组。必要。
step:序列步长(增量)。可选,默认为1。
返回值:
此方法不会改变传入的数组,会返回一个包含最大序列的新数组。
调用示例:
maxSequence([5,7,2,4,0,3,9],1);//return[2,3,4,5] maxSequence([5,7,2,4,0,3,9],2);//return[5,7,9]