一道算法题(JS)-寻找数组中最大连续序列

栏目: 编程工具 · 发布时间: 6年前

内容简介:给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为输入:[100, 4, 200, 1, 3, 2]解释:最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

给定一个未 排序 的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)

示例:

输入:[100, 4, 200, 1, 3, 2]

输出: 4

解释:最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

思路

  • 连续序列,首先要对传入数组进行 排序
  • 连续序列的标志为 s[n] - s[n-1] === 1 ,针对这个来进行循环判断
  • 定义循环中的最大长度 num 以及最终长度 max ,每次需取 max(num, max)
  • 当 s[n] - s[n-1] !== 1 时,及连续序列断开,需重置当前最大长度
  • 特殊用例情况:[1,2,2,3]中的连续序列为[1,2,3],长度为3。因此在循环中当s[n] === s[n-1]时候,应跳过

直接上代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function(nums) {
  if (!nums.length) return 0;
  var sortedNums = nums.sort((a,b) => (a - b));
  
  var i = 1;
  var num = 1;
  var max = 1;
  while(i < sortedNums.length) {
    if (sortedNums[i] - sortedNums[i - 1] === 1) {
      num++;
    } else if (sortedNums[i] === sortedNums[i - 1]) {
      i++;
      continue;
    } else {
      num = 1;
    }
    max = Math.max(max, num);
    
    i++;
  }
  
  return max
};
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图解Java多线程设计模式

图解Java多线程设计模式

[日] 结城浩 / 侯振龙、杨文轩 / 人民邮电出版社 / 2017-8 / 89.00元

本书通过具体的Java 程序,以浅显易懂的语言逐一说明了多线程和并发处理中常用的12 种设计模式。内容涉及线程的基础知识、线程的启动与终止、线程间的互斥处理与协作、线程的有效应用、线程的数量管理以及性能优化的注意事项等。此外,还介绍了一些多线程编程时容易出现的失误,以及多线程程序的阅读技巧等。在讲解过程中,不仅以图配文,理论结合实例,而且提供了运用模式解决具体问题的练习题和答案,帮助读者加深对多线......一起来看看 《图解Java多线程设计模式》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试