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]