LeetCode 128. 最长连续序列

 当我按照官方的思路写出代码,提交后并未通过,查看错误,发现算法错误的将[2147483647,-2147483648]也视为连续的整数了,这是因为我没有考虑到int类型的边界。将代码稍加修改,即成功提交

//哈希表,建议看官方的题解,尤其是演示动画
class Solution {
    public int longestConsecutive(int[] nums) {
        //首先用set把这个整数数组去重
        Set<Integer> set = new HashSet<Integer>();
        for(int num : nums){
            set.add(num);
        }
        
        //维护一个最长连续序列的长度变量
        int maxLongNum = 0;
        //遍历Set
        for(int num : set){
            //如果当前元素为X,找它的前一个元素X-1是否存在在Set中,存在即跳过,因为从X-1的最长序列包含从X开始的最长序列
            if(num == Integer.MIN_VALUE || !set.contains(num - 1)){
                //X-1不存在,即更新目前的连续整数数组的长度,再找X+1,如果可以找到,长度+1
                int curNum = num;
                int curLongNum = 1;
                while(set.contains(curNum + 1)){
                    curNum += 1;
                    if(curNum == Integer.MIN_VALUE) break;
                    curLongNum += 1;
                }
                //没有X+1了,把目前的连续长度和最大的长度比较,更新最大长
                maxLongNum = Math.max(maxLongNum,curLongNum);
            }
        }
        //遍历完后,返回最长长度
        return maxLongNum;
    }
}

 

posted @ 2020-10-28 17:35  peanut_zh  阅读(76)  评论(0编辑  收藏  举报