JavaScript实现找出数组中最长的连续数字序列

 更新时间:2014年09月03日 10:18:34   投稿:whsnow  
这篇文章主要介绍了JavaScript实现找出数组中最长的连续数字序列的方法,需要的朋友可以参考下

原始题目:

给定一个无序的整数序列, 找最长的连续数字序列。

例如:

给定[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]

相关文章

  • bootstrap-table后端分页功能完整实例

    bootstrap-table后端分页功能完整实例

    这篇文章主要介绍了bootstrap-table后端分页功能,结合完整实例形式分析了bootstrap-table后端请求、数据分页功能具体步骤与实现技巧,需要的朋友可以参考下
    2020-06-06
  • JS堆栈内存的运行机制详解

    JS堆栈内存的运行机制详解

    栈内存主要用于存储各种基本类型的变量,包括Boolean、Number、String、Undefined、Null,以及对象变量的指针(地址值),这篇文章主要介绍了JS堆栈内存的运行机制,需要的朋友可以参考下
    2022-06-06
  • 使用 JavaScript 进行函数式编程 (一) 翻译

    使用 JavaScript 进行函数式编程 (一) 翻译

    本文是函数式编程系列的第一篇文章。这里我会简要介绍一下编程范式,然后会直接介绍使用 Javascript 进行函数式编程的概念,因为 JavsScript 是最被认可的函数式程序语言之一。我们鼓励读者通过参考资料部分进一步了解这一迷人的概念
    2015-10-10
  • 微信小程序上传帖子的实例代码(含有文字图片的微信验证)

    微信小程序上传帖子的实例代码(含有文字图片的微信验证)

    这篇文章主要介绍了小程序上传帖子(含有文字图片的微信验证)的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • JS 数组和对象的深拷贝操作示例

    JS 数组和对象的深拷贝操作示例

    这篇文章主要介绍了JS 数组和对象的深拷贝操作,结合实例形式分析了JS 数组和对象的深拷贝基本原理与操作技巧,需要的朋友可以参考下
    2020-06-06
  • JavaScript如何把两个数组对象合并过程解析

    JavaScript如何把两个数组对象合并过程解析

    这篇文章主要介绍了JavaScript如何把两个数组对象合并过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • js实现3d悬浮效果

    js实现3d悬浮效果

    本文主要分享了js实现3d悬浮效果的示例代码,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • js取得当前网址

    js取得当前网址

    用js获取当前网页的网址,平时一直用location.href;下一篇我会把document.url和location.href对比一下
    2008-05-05
  • 使用js简单实现了tree树菜单

    使用js简单实现了tree树菜单

    使用js简单实现了树菜单!具体实现实例代码如下,相信自己你一定可以实现的更好
    2013-11-11
  • 新浪中用来显示flash的函数

    新浪中用来显示flash的函数

    新浪中用来显示flash的函数...
    2007-04-04

最新评论