leetcode 128. 最长连续序列 困难 Set

题目:
在这里插入图片描述

分析:根据题目意思,这次要找到数值上连续的最长序列长度,并不要求位置连续,想到了用hashmap统计每个元素的个数以应对重复元素的情况,但后来发现错了,重复元素的情况不能算作连续
在这里插入图片描述
既然重复元素不算,那么去重即可,去重自然想到用set
接下来的思路就是计算每个作为连续序列的开始元素的连续最长序列长度,连续序列的开始元素怎么定义?如果这个不存在这个元素-1,那么这个元素就作为一个连续序列的开始元素,这样考虑一定不会考虑漏

代码:

class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for(int num : nums){
            set.add(num);
        }
        int maxLength = 0;
        for(int num : set){
        	//不存在这个元素-1,这个元素就作为一个连续序列的开始元素
            if(!set.contains(num-1)){
                int currentNum = num;
                int currentLength = 1;
                //一直往后面找,因为要算最长
                while(set.contains(currentNum+1)){
                    currentNum ++;
                    currentLength ++;
                }
                maxLength = Math.max(maxLength, currentLength);
            }
        }
        return maxLength;
    }
}

在这里插入图片描述
在这里插入图片描述

发布了134 篇原创文章 · 获赞 17 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_40208575/article/details/105341674