首頁 > web前端 > js教程 > JavaScript實作找出陣列中最長的連續數字序列_javascript技巧

JavaScript實作找出陣列中最長的連續數字序列_javascript技巧

WBOY
發布: 2016-05-16 16:37:38
原創
2180 人瀏覽過

原題目:

給定一個無序的整數序列, 找出最長的連續數字序列。

例如:

已知[100, 4, 200, 1, 3, 2],

最長的連續數字序列是[1, 2, 3, 4]。

小菜給的解法:

function maxSequence(array,step){
var _array = array.slice(), //clone array
_step = 1,
_arrayTemp = [],
i = 0;

var parseLogic = {
//result container
parseResults: [],
//set value to array,what's the last array of parseResults
set: function(n){
this.parseResults[this.parseResults.length-1].push(n);
},
//get the last array from parseResults
get: function(){
return this.parseResults[this.parseResults.length-1];
},
//put a new array in parseResults
addItem: function(){
this.parseResults.push([]);
},
//sort parseResults
sortByAsc: function(){
this.parseResults.sort(function(a,b){
return a.length - b.length;
});
}
};

//check params
_step = step || _step;

//sort array by asc
_array.sort(function(a,b){
return a - b;
});

//remove repeat of data
for(i = 0;i<_array.length;i++){
if(_array[i] != _array[i+1]){
_arrayTemp.push(_array[i]);
}
}
_array = _arrayTemp.slice();
_arrayTemp = [];

//parse array
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();
}
}

//sort result
parseLogic.sortByAsc();

//get the max sequence
return parseLogic.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]
登入後複製

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板