LeetCode 128: 最长连续序列
LeetCode 128: 最长连续序列
题目:
给定一个未排序的整数数组 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
解题思路
通过哈希集合存储整数,以快速判断是否存在相邻数字,从而高效地找出数组中的最长连续序列
1: 首先将数组中的所有元素放入到 HashSet 中,去除掉重复元素。并用于后续常数级别的查询操作。
2: 遍历整个HashSet,首先判断当前元素-1 的值是否在 HashSet中,如果不存在,才有可能是一个连续的序列。
3: 如果第一个元素-1 的值 不在 HahSet 中,则记录当前的值,循环查询当前值+1 的值是否在 HashSet中。如果存在,则连续序列的长度+1。
4: 最后计算连续序列的最大值。
解题代码
class Solution {public int longestConsecutive(int[] nums) {Set<Integer> numSet = new HashSet<Integer>();for (int i : nums) {numSet.add(i);}int longStreak = 0;for (int num : numSet ) {if (!numSet.contains(num -1)) {int currentNum = num;int currentStreak = 1;while (numSet.contains(currentNum + 1 )) {currentNum +=1;currentStreak +=1;}longStreak = Math.max(longStreak,currentStreak);}}return longStreak;}
}
以上就是最长连续序列的解题过程。除了上面的解题思路,官方网站上也有其他大神的解题思路。
传送链接如下:
https://leetcode.cn/problems/longest-consecutive-sequence/solutions/?envType=study-plan-v2&envId=top-100-liked