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

时间: 2018-04-23阅读: 537标签: 算法

原始题目:给定一个无序的整数序列, 找最长的连续数字序列。例如:给定[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, 2, 3, 4],返回 [1, 3, 2, 4]。思路:排序好的数组:找到奇数进行操作。乱序的数组:使用sort方法进行排序+提取奇数

一道有意思的面试算法题

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。这道题第一眼看过去,思路挺简单的,我们只需要维护一个对象来记录每一个元素出现的次数,使用元素的值作为key,元素出现的次数作为value。

为什么我认为数据结构与算法对前端开发很重要?

一个具有层级结构的数据,实现这个功能非常容易,因为这个结构和组件的结构是一致的,递归遍历就可以了。但是,由于后端通常采用的是关系型数据库,所以返回的数据通常会是这个样子:前端这边想要将数据转换一下其实也不难,因为要合并重复项

js算法_八皇后问题的JavaScript解法

关于八皇后问题的 JavaScript 解法,八皇后问题是一个以国际象棋为背景的问题,八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为 n×n ,而皇后个数也变成n 。当且仅当n = 1或n ≥ 4时问题有解

js字典对象_js实现字典Dictionary类操作

字典(Dictionary)是一种以 键-值对 形式存储数据的数据结构 ,其实对于javascript来说,字典类(Dictionary)的基础是Array类,js中的Array既是一个数组,同时也是一个字典。字典(Dictionary)类的基础是 Array 类。同之前的我们所看到的数据结构一样,字典类也应该有添加、删除、清空等操作。

js实现链表_javascript中的链表结构

很多编程语言中数组的长度是固定的,就是定义数组的时候需要定义数组的长度,所以当数组已经被数据填满的时候,需要再加入新的元素就很困难。只能说在部分变成语言中会有这种情况,在javascript中和php中数组的长度是可以任意增加的。avascript中有一个很方便的方法splice()方法很方便的就可以添加或删除元素。

js二叉树的遍历算法

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

js背包问题算法_JavaScript 背包问题详解

打算好好学一下算法,先拿背包问题入手。最开始的01背包耗时最多,以前只会枚举(就是普通的for循环,暴力地一步步遍历下去),递归与二分,而动态规划所讲的状态表与状态迁移方程为我打开一扇大门。

js多叉树结构的数据,parent表示法转成children表示法

要求是将这个数组转成一个children表示法的对象,即从根节点开始,每个节点存有其子节点数组。转化效果如下(节点必须有个唯一标识符,以下id就是,并且转化前后其他属性保持不变,这里为了显示简洁没有加入其他属性。

js算法_奇偶分割数组

分割一个整数数组,使得奇数在前偶数在后。 比如:给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]。思路分析:排序好的数组:找到奇数进行操作。乱序的数组:使用sort方法进行排序+提取奇数

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

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯