【问题描述】[困难]

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

【解答思路】

1. Sort+Compare
  • 先排序,题意要求连续序列,即可以比较nums[i]与 nums[i - 1],如果不相等,表示是递增的趋势,相等则反之,递增后需要判断是否连续,即相邻的元素差值是否为1

  • 下面的代码处理边界casecase 如[-1,0][−1,0],不会比较max与cur的值,需要在最后一道防线拦截一次

时间复杂度:O(NlogN) 空间复杂度:O(1)

    public int longestConsecutive(int[] nums) {if (nums == null || nums.length == 0) return 0;Arrays.sort(nums);int n = nums.length;int max = 1, cur = 1;for (int i = 1; i < n; i++) {if (nums[i] != nums[i - 1]) {if (nums[i - 1] + 1 == nums[i]) cur++;else {max = Math.max(max, cur);cur = 1;}}}return Math.max(max, cur);}
2. Hash



时间复杂度:O(N) 空间复杂度:O(1)

 public int longestConsecutive(int[] nums) {Set<Integer> set = new HashSet<>();for (int num : nums) set.add(num);int max = 0;for (int num : nums) {if (!set.contains(num - 1)) {//判断set不包含当前元素-1的值,跳过已经计算的最长递增序列int curNum = num;int curCnt = 1;while (set.contains(curNum + 1)) {curNum += 1;curCnt += 1;}max = Math.max(max,curCnt);}}return max;}

【总结】

1.极小过渡到最大,最大过渡到极小
2.暴力优化到最佳结果

转载链接:https://leetcode-cn.com/problems/longest-consecutive-sequence/solution/dong-tai-gui-hua-jie-zui-chang-zi-xu-lie-zi-chua-5/

[Leedcode][JAVA][第128题][最长连续序列][Hash]相关推荐

  1. [Leedcode][JAVA][第5题][最长回文子串][数组][动态规划]

    [问题描述][第5题][最长回文子串][中等] 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000.示例 1:输入: "babad" 输出: & ...

  2. [Leedcode][JAVA][第14题][最长公共前缀][二分][横竖扫描][分治]

    [问题描述][中等] 编写一个函数来查找字符串数组中的最长公共前缀.如果不存在公共前缀,返回空字符串 "".示例 1:输入: ["flower","f ...

  3. leetcode 128. Longest Consecutive Sequence | 128. 最长连续序列(Java)

    题目 https://leetcode.com/problems/longest-consecutive-sequence/ 题解 方法1:HashMap 解法,O(n^2) 如下图,假设 n=4 被 ...

  4. LeetCode 128. 最长连续序列 golang

    128. 最长连续序列 [困难] 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释 ...

  5. [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]

    [问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...

  6. [Leedcode][JAVA][第470题][Ran7()实现Rand10()]

    [问题描述][Leedcode][JAVA][第470题][Ran7()实现Rand10()] 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 ...

  7. [Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]

    [问题描述][Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2.从下标为 0 跳到下标为 1 的位置 ...

  8. 算法--------最长连续序列(Java版本)

    题目 给定一个未排序的整数数组,找出最长连续序列的长度.要求算法的时间复杂度为 O(n).示例:输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, ...

  9. 【LeetCode】128. 最长连续序列

    一.题目描述 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 二.示例 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连 ...

最新文章

  1. python常用知识点总结-python 类知识点总结
  2. WINDOWS系统文件讲解
  3. java geom_java.awt.geom 类 Area - Java 中文参考手册
  4. 微软正式释出基于 Chromium 的 Edge 预览版本
  5. c语言用递归法判断回文字符串,递归方式判断一个字符串是否为回文字符串
  6. dropbox离线安装版下载方法
  7. [翻译] GiFHUD
  8. 队列在层次遍历中的应用
  9. VC中CListCtrl设置滚动条在最下边的方法(MSDN中的例子)
  10. 图解win7中IIS7.0的安装及配置ASP环境
  11. 堆排序时间复杂度计算
  12. 清北学堂-D1-T1-alien
  13. linux关闭3389端口,如何修改云服务器(Windows、Linux)的默认3389远程端口?
  14. java球球的表面积和体积代码_【编程1小时】球体表面积和体积计算
  15. 学习vue之前应该有哪些基础知识
  16. 国家开放大学2021春1021劳动与社会保障法题目
  17. 从云计算到容器到容器云
  18. springBoot整合mybatis步骤
  19. unity | 一次鼠标点击,触发两次?
  20. 路由器端口映射设置方法图解

热门文章

  1. windows 下安装Python easy_install 和pip
  2. 初入网络系列笔记(6)TFTP协议
  3. Hibernate中主键生成策略
  4. hdu 3652 B-number 数位dp
  5. js获取checkbox值的方法
  6. iOS: 图解Xcode常用的快捷键
  7. Win配置Apache+mod_wsgi+django环境+域名
  8. Android GridView,recycleview,栅格布局
  9. SQLite shell操作
  10. Web中Servlet