继续刷LeetCode 热题 HOT 100 的题目,并且在博客更新我的solutions。在csdn博客中我会尽量用文字解释清楚,相关Java代码大家可以前往我的个人博客jinhuaiyu.com中查看。
题目:最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9
提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
solution 1:利用HashMap在遍历时动态更新已遍历元素对应的当前最长连续序列长度
用一个HashMap来记录到当前遍历时,每个不重复的已遍历元素所在的最长连续序列的长度。但起始到遍历完成时,并不是所有元素对应的value都是所在最长连续序列的长度,我们在每轮遍历中除了本身元素外,只会更新它所处的最长连续序列的左右两端元素的value。这样的话,每轮遍历时最多插入/修改三次,因此时间复杂度为O(n),如果当前元素所处的最长连续序列中每个元素都修改value,时间复杂度就是O(n²)了。
以{4,7