提高网站关键词排名,众筹网站开发需求,网站建网站建设网站站网站,排名优化的公司LeetCode 128: 最长连续序列
题目:
给定一个未排序的整数数组 nums #xff0c;找出数字连续的最长序列#xff08;不要求序列元素在原数组中连续#xff09;的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例 1#xff1a;
输入#xff1a;nums […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) {SetInteger numSet new HashSetInteger();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/?envTypestudy-plan-v2envIdtop-100-liked