【LeetCode】最长连续序列 Java 题解
题目描述
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
复制代码
思路分析
今天的算法题目是数组题目,题目要求找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度,并且要求时间复杂度为 O(n)的算法。
首先想到可以对数组排序,但是不满足时间复杂度的要求,需要转化思路。
暴力的方法就是枚举每一个数值的连续过程,我们需要处理每一个数据,在数组中寻找。数组中查找,我们常常使用 hashset, 判断数组是否包含某一个数。动态更新长度。
这里需要注意的一点是,单纯任意数字的查找,我们会有一部分重复计算。效率不高,这里,我们可以做一下处理,若当前的数字是最小的数字,在开始查找计算。这个优化的思路不好想,我是看题解才理解到的,需要多加理解一下。实现代码如下,供参考。
通过代码
复制代码
总结
上述算法的时间复杂度是 O(n),空间复杂度是 O(n)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/ad95b4b3c1fa83a1f8e8ab6ab】。文章转载请联系作者。
评论