原生Js获取数组中最长的连续数字序列的方法
原始题目:给定一个无序的整数序列, 找最长的连续数字序列。例如:给定[100, 4, 200, 1, 3, 2],最长的连续数字序列是[1, 2, 3, 4]。
js代码如下:
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 = [];
parseLogic.addItem();//parse array
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();
}
}
parseLogic.sortByAsc();//sort result
return parseLogic.get();//get the max sequence
}方法名称:
maxSequence(array,step)参数说明:
array:要查找的数组。必要。
step:序列步长(增量)。可选,默认为1。
返回值:
此方法不会改变传入的数组,会返回一个包含最大序列的新数组。
调用示例:
console.log(maxSequence([5,7,2,4,0,3,9],1)); //return [2,3,4,5]
console.log(maxSequence([5,7,2,4,0,3,9],2)); //return [5,7,9]本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!