原生Js获取数组中最长的连续数字序列的方法

更新日期: 2018-04-23阅读量: 2339标签: 算法

原始题目:给定一个无序的整数序列, 找最长的连续数字序列。例如:给定[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]


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: https://www.fly63.com/article/detial/697

Js加密算法_Base64

首先有个小Tips,1个字母字符 = 1个字节(byte) = 8位(bit),这是表示单位.Base64是网络上最常见的用于传输 8bit 的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。

从js讲解时间复杂度和空间复杂度

今天有同事在检查代码的时候,由于函数写的性能不是很好,被打回去重构了,细思极恐,今天和大家分享一篇用js讲解的时间复杂度和空间复杂度的博客;复杂度的表示方式之前有看过的,你可能会看到这么一串东西

用js在控制台打印九九乘法表

不管是打印什么样三角形九九乘法表,我们都应该找到有规律的地方,比如第一列的数字是什么规律,第一行的数字是什么规律,只要找到了共性,九九乘法表就很简单

js实现生成任意长度的随机字符串

js生成任意长度的随机字符串,包含:数字,字母,特殊字符。实现原理:可以手动指定字符库及随机字符长度,利用Math.round()和Math.random()两个方法实现获取随机字符

js实现合并两个有序数组

给定两个有序整数数组arr1和arr2,将 arr2和arr1进行合并为一个单调非递减的数组,并将其输出。方法一利用循环、方法二直接使用数组的sort方法。

影响计算机算法世界的十位大师

算法和程序设计技术的先驱者。Oh,God!一些国外网站这样评价他。一般说来,不知道此人的程序员是不可原谅的。其经典著作《计算机程序设计艺术》更是被誉为算法中“真正”的圣经

Js算法:计算两数之和

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和

Js实现kmp算法_字符串查找算法

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息

js实现快速排序算法的2种方式

通过两个for循环,每一次对比相邻两个数据的大小,小的排在前面,如果前面的数据比后面的大就交换这两个数的位置,这个方法就是比较次数太多了,效率比较低。

js二叉树的遍历算法

二叉树是非常重要的数据结构,其中一棵树最上面的点称为根节点,如果一个节点下面连接多个节点,那么该节点称为父节点,下面的节点称为子节点,二叉树的每一个节点最多有2个子节点,一个节点子节点的个数称为度,二叉树每个节点的度只能是0,1,2中的一个,度为0的节点称为叶节点。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!