大家好!我是曾续缘😉
今天是《LeetCode 热题 100》系列
发车第 3 天
哈希第 3 题
❤️点赞 👍 收藏 ⭐再看,养成习惯
给定一个未排序的整数数组
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
的数是否存在哈希表中, 这样找到这个连续序列的最后一个数字,进而得到这个序列的长度, 对于不是连续序列的第一个数字, 肯定就不是最长的连续序列, 跳过即可.
Code
查看代码
java
class Solution {
public int longestConsecutive(int[] nums) {
Set<Integer> se = new HashSet<>();
for(int num : nums){
se.add(num);
}
int ans = 0;
for(int num : se){
if(se.contains(num - 1)){
continue; // 说明不是连续序列中的第一个数字, 跳过
}
int cur = num;
while(se.contains(cur + 1)){
cur++;
}
ans = Math.max(ans, cur - num + 1);
}
return ans;
}
}