[Leedcode][JAVA][第128题][最长连续序列][Hash]
【问题描述】[困难]
给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 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]相关推荐
- [Leedcode][JAVA][第5题][最长回文子串][数组][动态规划]
[问题描述][第5题][最长回文子串][中等] 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000.示例 1:输入: "babad" 输出: & ...
- [Leedcode][JAVA][第14题][最长公共前缀][二分][横竖扫描][分治]
[问题描述][中等] 编写一个函数来查找字符串数组中的最长公共前缀.如果不存在公共前缀,返回空字符串 "".示例 1:输入: ["flower","f ...
- leetcode 128. Longest Consecutive Sequence | 128. 最长连续序列(Java)
题目 https://leetcode.com/problems/longest-consecutive-sequence/ 题解 方法1:HashMap 解法,O(n^2) 如下图,假设 n=4 被 ...
- LeetCode 128. 最长连续序列 golang
128. 最长连续序列 [困难] 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释 ...
- [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]
[问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...
- [Leedcode][JAVA][第470题][Ran7()实现Rand10()]
[问题描述][Leedcode][JAVA][第470题][Ran7()实现Rand10()] 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 ...
- [Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]
[问题描述][Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2.从下标为 0 跳到下标为 1 的位置 ...
- 算法--------最长连续序列(Java版本)
题目 给定一个未排序的整数数组,找出最长连续序列的长度.要求算法的时间复杂度为 O(n).示例:输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, ...
- 【LeetCode】128. 最长连续序列
一.题目描述 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 二.示例 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连 ...
最新文章
- python常用知识点总结-python 类知识点总结
- WINDOWS系统文件讲解
- java geom_java.awt.geom 类 Area - Java 中文参考手册
- 微软正式释出基于 Chromium 的 Edge 预览版本
- c语言用递归法判断回文字符串,递归方式判断一个字符串是否为回文字符串
- dropbox离线安装版下载方法
- [翻译] GiFHUD
- 队列在层次遍历中的应用
- VC中CListCtrl设置滚动条在最下边的方法(MSDN中的例子)
- 图解win7中IIS7.0的安装及配置ASP环境
- 堆排序时间复杂度计算
- 清北学堂-D1-T1-alien
- linux关闭3389端口,如何修改云服务器(Windows、Linux)的默认3389远程端口?
- java球球的表面积和体积代码_【编程1小时】球体表面积和体积计算
- 学习vue之前应该有哪些基础知识
- 国家开放大学2021春1021劳动与社会保障法题目
- 从云计算到容器到容器云
- springBoot整合mybatis步骤
- unity | 一次鼠标点击,触发两次?
- 路由器端口映射设置方法图解